我遇到了NHibernate的一些奇怪问题以及包中的代理项目的使用。我的映射看起来类似于:
<?xml version="1.0" encoding="utf-8" ?>
<bag name="Markets" table="ITPUserWatchlistMarkets" cascade="none" lazy="false">
<key column="UserWatchlistId" />
<many-to-many class="Swan.Domain.Markets.Market, Swan.Domain.Markets" column="MarketId" lazy="proxy" />
</bag>
据我所知,通过将多对多映射设置为lazy =“proxy”,NHibernate应该创建一个与我的市场类型不同的代理对象,其中只有身份密钥而没有设置其他内容它
但是,在运行调试时,我实际上可以看到真实的市场实体被实例化并添加到Markets包中,这不应该发生。
我的映射是不正确的,还是NHibernate创建了实际的实体而不是它自己的反射类型作为代理对象?
此致 阿尔瓦罗
答案 0 :(得分:3)
您对NHibernate如何实例化代理和实体的理解是正确的。第一次访问该代理实体的任何属性时,NHibernate将从数据库加载实体。
您应该尝试监视NHibernates创建的sql查询,以查看何时使用NH Profiler或SQL Profiler调用这些查询。
答案 1 :(得分:-1)
经过进一步调查后,发现市场类映射在元素中设置了一个显式的lazy =“false”属性,覆盖了包自己的代理设置。
现在全部排序!