我正在尋找一個快捷方式。我有一些具有多對多關係的NH實體。事情是這樣的:NHibernate:通過id將實體添加到多對多集合只有
public class Customer : EntityBase<Customer>
{
public virtual IList<Category> Categories { get; set; }
}
public class Category : EntityBase<Category>
{
public virtual IList<Customer> Customers { get; set; }
}
請記住,這是一個非常簡單的描述,所以抵制誘惑,建議我不使用許多一對多的安排或者說,我應該使用值類型或類似的東西。
在DB方面,這種關係是通過一個帶有兩列的單獨表格完成的 - Customer_Id
和Category_Id
。
我真的很希望能夠將現有的Category
添加到Customer
而不必從數據庫中檢索完整的實體。也許這樣的事情:
customerEntity.Categories.Add(new Category { Id = 2 });
原因是應用程序是一個ASP.NET MVC應用程序,我使用ViewModels作爲我的視圖。這些Customer
ViewModels最終的類別選擇爲List<int>
,當我將該ViewModel映射到相應的Customer
實體時,我希望能夠將這些類別ID吸引到Categories
列表中,而不必擊中數據庫首先檢索它們。
我希望能夠做到這一點的部分原因是我想盡量減少數據庫調用,但我也希望我的映射器類能夠創建Customer
實體,而無需撥打電話我的服務層去尋求其他對象...這似乎是不好的設計。我還希望避免必須添加另一個圖層來調用映射器,然後執行從存儲庫中提取實體的其他映射(它本身通過域服務層訪問)。
我檢出了idbag
,但是對於我使用Fluent NHibernate的人來說,它不支持該構造,並且從我能從文檔中收集到的兩個關於該實體的List<int>
的文檔中,仍然希望能夠訪問這些集合中的完整實體。
我是否問太多NHibernate?
不幸的是,我的會話沒有直接暴露給ASP.NET MVC應用程序。我不得不打電話給另一個庫中的存儲庫。我希望必須讓我的ViewModel映射器必須直接與存儲庫層對話。有什麼辦法呢? –
好吧,讓我糾正自己 - 我通常不會從MVC應用程序訪問會話。 –