从我收集的内容。 DbSet
是一个类型化的实体缓存,在保存时,DbContext
轮询所有需要持久性的实体的DbSets
。在NHibernate中,所有实体类型的缓存和更改检测都合并到ISession
实例中。
那么,要将非常简单的EF代码转换为NH代码,我可以取消DbSet
并直接在会话中执行所有操作?
答案 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>
实例那样涉及模拟。