默认情况下,nhibernate执行即时获取
我正在通过代码映射使用nhibenate。出于某种原因,它在默认情况下执行的是即时抓取,而它应该是惰性的 以下是我的地图:默认情况下,nhibernate执行即时获取,nhibernate,nhibernate-mapping,mapping-by-code,Nhibernate,Nhibernate Mapping,Mapping By Code,我正在通过代码映射使用nhibenate。出于某种原因,它在默认情况下执行的是即时抓取,而它应该是惰性的 以下是我的地图: public EntityMap() { Lazy(true); Id(x => x.Id, map => { map.Generator(Generators.GuidComb); map.UnsavedValue("00000000-0000-0
public EntityMap()
{
Lazy(true);
Id(x => x.Id, map =>
{
map.Generator(Generators.GuidComb);
map.UnsavedValue("00000000-0000-0000-0000-000000000000");
});
}
因此,我尝试在基类中指定lazy(true),以便所有关系都通过延迟加载完成
我还使用约定映射,其配置如下:
// foreign key convention (many2one side)
mapper.BeforeMapManyToOne += (insp, prop, map) => map.Lazy(LazyRelation.Proxy);
mapper.BeforeMapManyToOne += (insp, prop, map) => map.Fetch(FetchKind.Select);
// bag conventions (one2many side)
mapper.BeforeMapBag += (insp, prop, map) => map.Lazy(CollectionLazy.Lazy);
mapper.BeforeMapBag += (insp, prop, map) => map.Fetch(CollectionFetchMode.Select);
// set conventions (one2many side)
mapper.BeforeMapSet += (insp, prop, map) => map.Lazy(CollectionLazy.Lazy);
mapper.BeforeMapSet += (insp, prop, map) => map.Fetch(CollectionFetchMode.Select);
Bag(x => x.Customer, colmap => { }, map => map.OneToMany(x => { }));
ManyToOne(x => x.Orders, map => { map.NotNullable(true); });
因此,我尝试了所有设置,使其抓取懒惰,但它仍然抓取渴望
下面是我用来加载数据的查询:
var session = SessionManager.GetCurrentSession();
return session.QueryOver<Customer>().List();
请帮忙
上面提到的所有设置都是为了延迟加载而添加的,最初指定的设置中没有一个…延迟加载的确切内容是什么?您的实体是如何建模的?执行什么SQL?我有客户表中引用的ORDERS表,订单应该延迟执行,问题中提到SQL查询…您确定映射正确吗?一个订单可以有多个客户,但一个客户只能有一个订单?这似乎是错误的做法。请发布您的实体类和映射类,这样我们就可以看到您拥有什么属性、它们是什么类型以及它们是如何映射的。另外,我要求的是执行的SQL,而不是您编写的查询。查看日志或使用NHibernate/SQL探查器。如果您使用的是json.net,它会反序列化您的代理对象,进行查询。。。通过使子对象为空,然后将它们发送到页面来测试它。。。