• NHibernate 3 Beginner's Guide


    前言

    这一章是一个完整的NHibernate的Simple,原文中用Fluent NHibernate做映射,但我使用NHibernate3.2版本,所以3.2的Conformist代替Fluent NHibernate.

    从这里我们将学习到使用NHibernate的一般步骤:

    1.定义Model

    2.映射Model

    3.定义配置

    4.1根据配置创建数据库

    4.2根据配置BuildSessionFactory

    5.用SessionFactory对象OpenSession

    6.用session对象做数据库操作

    1.定义Model

    定义两个类Product,Category

    public class Category
    {
        public virtual int Id { get; set; }
        public virtual string Name { get; set; }
        public virtual string Description { get; set; }
    }
    public class Product
    {
        public virtual int Id { get; set; }
        public virtual string Name { get; set; }
        public virtual string Description { get; set; }
        public virtual decimal UnitPrice { get; set; }
        public virtual int ReorderLevel { get; set; }
        public virtual bool Discontinued { get; set; }
        public virtual Category Category { get; set; }
    }
    类图
    类关系图:

    2.映射Model

    创建两个类CategoryMap,ProductMap

    public class ProductMap : ClassMapping<Product>
    {
        public ProductMap()
        {
            this.Id(p => p.Id, map =>
            {
                map.Generator(Generators.Identity);
            });
            this.Property(p => p.Description);
            this.Property(p => p.Discontinued);
            this.Property(p => p.Name);
            this.Property(p => p.ReorderLevel);
            this.Property(p => p.UnitPrice);
            this.ManyToOne(p => p.Category);
        }
    }

    上面主键自动递增,Product的Category属性用ManyToOne映射

    3.定义配置

    public Form1()
    {
        InitializeComponent();
    
        configuration.DataBaseIntegration(
            x =>
            {
                x.Dialect<SQLiteDialect>();
                x.Driver<SQLite20Driver>();
                x.ConnectionString = connString;
            });
    
        var mapper = new ModelMapper();
        mapper.AddMapping<ProductMap>();
        mapper.AddMapping<CategoryMap>();
        var hbmMapping = mapper.CompileMappingForAllExplicitlyAddedEntities();
        configuration.AddMapping(hbmMapping);
        Debug.WriteLine(hbmMapping.AsString());
    }

    这里做了几件事,设置数据库方言,数据库驱动,数据库连接字符串,把映射添加到配置中.

    Debug.WriteLine输出的xml映射:

    View Code

    4.1根据配置创建数据库

    有了配置就可以生成数据库

    private void btCreateDataBase_Click(object sender, EventArgs e)
    {
        var sc = new SchemaExport(configuration);
        sc.SetOutputFile(@"db.sql").Execute(false, false, false);
        sc.Create(false, true);
    }

    生成的数据库关系图

    4.2根据配置BuildSessionFactory

    有了配置就可以BuildSessionFactory

    private ISessionFactory CreateSessionFactory()
    {
        return configuration.BuildSessionFactory();
    }

    5.用SessionFactory对象打开Session

    有了ISessionFactory 就可以OpenSession

    private void btnCreateSession_Click(object sender, EventArgs e)
    {
        var factory = CreateSessionFactory();
        using (var session = factory.OpenSession())
        {
            // do something with the session
        }
    }

    6.用session对象做数据库操作

    有了ISession对象,就像做数据库操作,可以把ISession对象想象成对象化的数据库

    添加

    private void btAddCategory_Click(object sender, EventArgs e)
    {
        var factory = CreateSessionFactory();
        using (var session = factory.OpenSession())
        {
            var category = new Category
            {
                Name = txtCategoryName.Text,
                Description = txtCategoryDescription.Text
            };
            var id = session.Save(category);
            MessageBox.Show(id.ToString());
        }
    }

    查询

    private void btLoadAll_Click(object sender, EventArgs e)
    {
        var factory = CreateSessionFactory();
        using (var session = factory.OpenSession())
        {
            var categories = session.Query<Category>()
            .OrderBy(c => c.Id)
            .Select(c => c.Name + "-" + c.Description).ToArray();
            lbCategory.DataSource = categories;
        }
    }
    结果
  • 相关阅读:
    餐饮点菜控件
    数据模块池
    关于sqlite数据库
    PHP使用DateTime类做时间日期到字符串转换
    php字符串比较函数
    Xdebug开源PHP程序调试器
    ubuntu chmod 无法更改 文件夹权限 系统提示“不允许的操作 2、linux 如何修改只读文件 3、ubuntu安装
    ubuntu的命令day1
    linux用终端上传文件和文件家到远程的服务器
    Symfony学习--原创。。。。
  • 原文地址:https://www.cnblogs.com/zjoch/p/4065582.html
Copyright © 2020-2023  润新知