NHibernate不需要像Entity Framework的DbSet这样的设备<T>吗?



根据我收集的信息。DbSet是一个类型化的实体缓存,在保存时,DbContext轮询所有DbSets以查找需要持久性的实体。在NHibernate中,所有实体类型的缓存和更改检测都组合在一个ISession实例中。

所以,要将非常简单的EF代码转换为NH代码,我可以去掉DbSet,直接在会话上执行所有操作?

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

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

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

NHibernate的好处在于,API是一个接口,因此与单元测试DbSet<T>实例不同,没有任何嘲讽。

最新更新