NHibernate采用非侵入式的方式进行对象-关系映射,从而成就了其轻量级ORM技术的美名,这一点相信成为很多架构师钟爱他的重要理由。NHibernate技术架构如下图所示:
NHibernate的使用大致可以分为配置信息、编写映射文件和持久化数据几个步骤:
一、配置信息
NHibernate需要对配置文件作以下配置方可使用:
NHibernate.Dialect.MsSql2008Dialect NHibernate.Connection.DriverConnectionProvider Data Source=localhost;User Id=sa;Password=11111111;Initial Catalog=Apollo;MultipleActiveResultSets=True;
二、映射文件
三、数据持久化
1 var sessionFactory = new Configuration().Configure().BuildSessionFactory();2 using (var session = sessionFactory.OpenSession())3 {4 session.Save(user);5 session.Flush();6 }
LINQ(Language Integrated Query,语言集成查询)是一组用于C#和VB.NET语言的扩展,它允许编写C#或者VB.NET代码以查询数据库相同的方式操作内存数据。LINQ提供提供了丰富的类似SQL的查询语法,功能强大且容易上手。
LINQ技术通过提供程序扩展,可以实现对任何数据源的访问。常用的提供程序有LINQ to SQL、LINQ to XML、LINQ to Objects、LINQ to Entities、LINQ to Datasets、LINQ to ADO.NET。LINQ技术架构如下图所示:
LINQ的使用大致包括连接配置、关系映射、上下文环境定义和数据持久化四步:
一、连接配置
LINQ的数据库连接配置与ADO.NET一样:
二、侵入式关系映射
[Table(Name = "User")] public class LinqUser : User { [Column(IsPrimaryKey = true)] public override Guid ID { get; set; } [Column] public override string Name { get; set; } }
三、上下文环境
internal class LinqContext : DataContext { public LinqContext(string connection) : base(connection) { } public LinqContext(IDbConnection connection) : base(connection) { } public TableUsers { get { return this.GetTable (); } } }
四、数据持久化
1 using (var db = new LinqContext(CONNECTION_STRING))2 {3 db.Users.InsertOnSubmit(user);4 db.SubmitChanges();5 }
Entity Framework的全称为ADO.NET Entity Framework,是在ADO.NET上层实现的ORM封装,其技术架构如下图所示:
Entity Framework的使用与LINQ一样,分为连接配置、关系映射、上下文环境定义和数据持久化四步:
一、连接配置
二、关系映射
Entity Framework是通过定义概念模型(CSDL)、物理模型(SSDL)及两者的映射关系(MSL),实现对象与关系映射的。
SSDL映射文件内容如下:
CSDL映射文件内容如下:
MSL映射文件内容如下:
三、上下文环境
Entity Framework提供了ObjectContext上下文环境,以对数据对象进行持久化操作。通过继承它,可以方便的实现自定义数据对象的访问。
internal class EntityContext : ObjectContext { public EntityContext() : this("name=EntityFramework") { } public EntityContext(string connectionString) : base(connectionString, "Chapter1") { this.Users = CreateObjectSet(); } public ObjectSet Users { get; set; } }
四、数据持久化
1 using (var db = new EntityContext())2 {3 db.Users.AddObject(user);4 db.SaveChanges();5 }