我有有許多一對多關係對自身的產品表(使用兩列多到多表),我已經用下面的代碼設置它在功能NHibernate:如何使用Fluent Nhibernate多對多實現最佳性能?
public class ProductConfiguration : ClassMap<Product>
{
public ProductConfiguration()
{
Table("Product");
Id(p => p.Id).GeneratedBy.Guid();
Map(p => p.Name).Not.Nullable().Length(254);
Map(p => p.Description).Not.Nullable().Length(1000);
Map(p => p.CreatedAt).Not.Nullable();
HasManyToMany(p => p.CrossSell)
.Table("ProductCrossSell")
.ParentKeyColumn("Id")
.ChildKeyColumn("ProductId");
}
}
我的MVC應用程序使用此設置兩個頁面:
- 指數 - 使用一個通用存儲庫GETALL方法來顯示所有產品。
- 詳細信息 - 使用通用存儲庫GetById方法在多對多關係中顯示一個產品和任何相關的交叉銷售產品設置。
它看起來像NHibernate的設置爲LazyLoad許多一對多默認情況下,所以當我火起來的應用程序和探查看着它,我可以看到,它並LazyLoad許多一對多具有以下警告「不鼓勵使用隱式事務」。
- 如何擺脫此警報?我找不到任何關於如何在事務中包裝LazyLoad以擺脫警報的信息。它甚至有可能嗎?
- 有沒有一種方法來通過告訴NHibernate不需要延遲加載,每當我要求GetById時,一定要加入表格,在一個查詢中獲取所有內容?我嘗試在多對多映射中使用.Fetch.Join(),但這也影響了我的GetAll查詢,該查詢現在顯示一個連接結果集,這也是不正確的。
對於這種簡單場景,最好的評價是什麼?
謝謝
傑米,你會說,「使用隱式的交易是不鼓勵」警報是不是在這種情況下,一個大問題?我不開始迭代通過關聯,直到視圖,所以lazyload總是會在事務範圍之外觸發。唯一的辦法就是像你說的那樣急於加載交易。 – Thomas 2010-07-14 21:35:15
我不會爲此擔心,特別是在讀取操作中。在幾乎所有情況下,我認爲你可以放心地忽略它。畢竟這只是一個警告。 :-) – 2010-07-14 22:46:11