65.9K
CodeProject 正在变化。 阅读更多。
Home

开始 Fluent NHibernate

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.81/5 (18投票s)

2011 年 12 月 25 日

CPOL

2分钟阅读

viewsIcon

110417

downloadIcon

5954

从 Visual Studio 开始你的项目,告别 SQL Server 和表

引言

从 Visual Studio 开始你的项目,告别 SQL Server 和表。

什么是 NHibernate?我们为什么要使用这项技术?如何开始使用 NHibernate?

NHibernate 是一个 ORM(对象关系映射)工具,它将关系数据和对象映射起来。使用 NHibernate 时,你无需从创建表开始,你只需要根据你的业务编写实体类,NHibernate 就会为你创建表。

我们(应用程序开发者)使用 NHibernate 来避免使用、分析和更改数据库带来的压力。使用 NHibernate 可以避免甚至进入你的 DBMS,当你需要更改某个表中的任何内容时,你只需要修改你的实体,而无需进入数据库并更改列和关系...等等。

这篇文章将提供你获得信心并继续使用 NHibernate 的一切。

步骤 1:创建你的业务实体

第一步是在你的项目中创建你的实体

public class Employee
    {
        public virtual int Id {get; set;}
        public virtual string FirstName {get; set;}
        public virtual string Position {get; set;}
        public virtual Department EmployeeDepartment  
		{get; set;} // Represent the relation between Employee and Department
    }
public class Department
    {
        public virtual int Id {get; set;}
        public virtual string Name {get; set;}
        public virtual string PhoneNumber {get; set;}
    }

记住为你的属性添加 virtual 关键字,NHibernate 会在运行时使用它来创建代理以允许延迟加载(现在你可以跳过它,我将在下一篇文章中深入讨论。)

步骤 2:创建映射实体

现在你必须为之前创建的每个实体创建一个映射实体,它代表了 NHibernate 的核心。实体发生的任何未来更改都应在此处更改映射。

class EmployeeMap : ClassMap<employee /><Employee>
    {
        //Constructor
        public EmployeeMap()
        {
            Id(x => x.Id);

            Map(x => x.FirstName);

            Map(x => x.Position);

            References(x => x.EmployeeDepartment).Column("DepartmentId");

            Table("Employee");
        }
    }
class DepartmentMap : ClassMap<department /><Department>
    {
        //Constructor
        public DepartmentMap()
        {
            Id(x => x.Id);

            Map(x => x.Name);

            Map(x => x.PhoneNumber);

            Table("Department");
        }
    }

记住为你的属性添加 virtual 关键字,NHibernate 会在运行时使用它来创建代理以允许延迟加载(在我的文章中,我更关注我们如何使用这项技术,而不是为什么使用它以及需要大量讨论的问题,如果你需要更多信息)。

NHibernate 方法(关键字)

  • Map:用于为选定的属性创建列
  • References:用于创建多对一关系,应用于多的一侧
  • Table:确定表名(可选)

步骤 3:创建配置

现在你必须编写配置行,这些行将只编写一次,你的程序的每次执行都将执行这些行,这些行将根据你的更新修改数据库

public class NHibernateHelper
    {
        private static ISessionFactory _sessionFactory;

        private static ISessionFactory SessionFactory
        {
            get
            {
                if (_sessionFactory == null)

                    InitializeSessionFactory();
                return _sessionFactory;
            }
        }

        private static void InitializeSessionFactory()
        {
            _sessionFactory = Fluently.Configure()
                .Database(MsSqlConfiguration.MsSql2008
                  .ConnectionString(
                  @"Server=(local);initial catalog=xxxxx;
		user=xxxxx;password=xxxxx;") // Modify your ConnectionString
                              .ShowSql()
                )
                .Mappings(m =>
                          m.FluentMappings
                              .AddFromAssemblyOf<Program>())
                .ExposeConfiguration(cfg => new SchemaExport(cfg)
                                                .Create(true, true))
                .BuildSessionFactory();
        }

        public static ISession OpenSession()
        {
            return SessionFactory.OpenSession();
        }
    }

现在你只需要运行你的应用程序并转到 SQL Server 查看你的表。

注意:不要忘记修改 ConnectionString

步骤 4:插入你的数据以测试项目

现在你必须通过在 MAIN 中编写这些行将一些行保存到你的数据库中

static void Main(string[] args)
        {
            using (var session = NHibernateHelper.OpenSession())
             {
                 using (var transaction = session.BeginTransaction())
                 {
                     var DepartmentObject = new Department 
			{Name = "IT", PhoneNumber = "962788700227" };
                     session.Save(DepartmentObject);
                     transaction.Commit();
                     Console.WriteLine("Department Created: " + DepartmentObject.Name);
                 }
             }
        }

希望这篇文章能为你提供 Fluent NHibernate 的基础知识。

© . All rights reserved.