【问题标题】:Does NHibernate need no device like Entity Framework's DbSet<T>?NHibernate 是否不需要像 Entity Framework 的 DbSet<T> 这样的设备?
【发布时间】:2016-01-06 18:13:13
【问题描述】:

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

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

【问题讨论】:

  • ISession 是完整的答案

标签: c# entity-framework nhibernate dbset isession


【解决方案1】:

在 EF 中查询实体的唯一强类型方法是使用 Linq。所以每个实体类型在实现IQueryable&lt;T&gt;的数据上下文中都有自己的DbSet&lt;T&gt;类型属性。

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

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

NHibernate 的优点在于 API 中的所有内容都是一个接口,因此与单元测试 DbSet&lt;T&gt; 实例不同,它不涉及模拟。

【讨论】:

  • 我想我只需要构建一个小的NhSet&lt;T&gt; shim,它将所有调用(例如Add)直接传递给会话。周围有太多DbSet 变量。
猜你喜欢
  • 1970-01-01
  • 2011-07-13
  • 2015-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-09
  • 1970-01-01
  • 2013-12-28
相关资源
最近更新 更多