2016-01-06 54 views
0

從我收集的。 DbSet是一個鍵入的實體緩存,在保存時,DbContext輪詢所有DbSets以尋求需要持久性的實體。在NHibernate中,所有實體類型的緩存和更改檢測都組合在一個ISession實例中。NHibernate是否不需要像Entity Framework的DbSet <T>這樣的設備?

因此,要將非常簡單的EF代碼轉換爲NH代碼,我可以取消DbSet,並直接在會話中執行所有操作?

+1

ISession是完整的答案 –

回答

2

查詢EF實體的唯一強類型方法是使用Linq。因此,每個實體類型在實現IQueryable<T>的數據上下文中都有自己的DbSet<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>實例不同的模擬。

+0

我想我只是建立一個'NhSet 'shim,它將所有的調用例如'Add'直接傳遞給會話。周圍存在太多'DbSet'變量。 – ProfK

相關問題