zoukankan      html  css  js  c++  java
  • 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;
        }
    }
    结果
  • 相关阅读:
    python学习之旅-02
    python学习之旅-01
    wps2016热点永久关闭
    一个游戏制作的全过程
    游戏是怎么赚钱的
    游戏数值策划入门教程
    成长系统的设计方法:如何“挖坑”,又不让玩家反感
    游戏数值策划经验篇:从多角度解读游戏经验值设计
    暴雪战斗公式——除法公式的精髓
    游戏数值策划属性篇(二):属性价值评估
  • 原文地址:https://www.cnblogs.com/zjoch/p/4065582.html
Copyright © 2011-2022 走看看