我有一个与自身有多对多关系的产品表(使用两列多对多表),我使用以下代码在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应用程序有两个页面使用此设置:
默认情况下,NHibernate设置为多对多的LazyLoad,所以当我启动应用程序并在分析器中观察它时,我可以看到它通过以下警告实现了LazyLoad多对多“使用不建议使用隐式交易“。
这种简单场景的最佳评价是什么?
由于
答案 0 :(得分:0)
默认情况下,所有集合都在NHibernate中延迟加载。
您必须通过某种类型的呼叫触发加载(甚至可能使用调试器监视)
答案 1 :(得分:0)
摆脱警告的方法是访问对象图并完全填充单个事务中的UI元素。
不是配置。您可以创建一个急切获取关联的HQL查询,并将该查询用于特定视图。我会坚持使用延迟加载,除非需要,否则不进行优化。 HQL将是:
return session.CreateQuery("from ProductionConfiguration pc join fetch pc.CrossSell where pc.Id = ?")
.SetGuid(0, id)
.List<ProductConfiguration>();