NHibernate是否不需要像Entity Framework的DbSet <t>那样的设备?

时间:2016-01-06 18:13:13

标签: c# entity-framework nhibernate dbset isession

从我收集的内容。 DbSet是一个类型化的实体缓存,在保存时,DbContext轮询所有需要持久性的实体的DbSets。在NHibernate中,所有实体类型的缓存和更改检测都合并到ISession实例中。

那么,要将非常简单的EF代码转换为NH代码,我可以取消DbSet并直接在会话中执行所有操作?

1 个答案:

答案 0 :(得分:2)

在EF中查询实体的唯一强类型方法是使用Linq。因此,每个实体类型在实现DbSet<T>的数据上下文中都有自己的类型为IQueryable<T>的属性。

在NHibernate中,有多个查询API(LINQ,QueryOver,Criteria [非泛型])可用,并且用户需要动态使用ISession。

因此,您可以执行context.Companies.ToList()session.Query<Company>().ToList()session.QueryOver<Company>().List()而不是session.Criteria(typeof(Company)).List()

关于NHibernate的好处是API中的所有内容都是一个接口,因此不像单元测试DbSet<T>实例那样涉及模拟。