2010-07-22 61 views
1

我遇到了一些奇怪的问题与NHibernate和使用代理项目内袋。我的映射看起来类似的东西: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> 

据我了解,通过设置许多一对多映射,懒惰=“代理”,NHibernate的应该创建代理对象,它与我的Market类型不同,只有身份密钥并且没有其他设置。

但是,通过调试运行时,我实际上可以看到真正的市场实体被实例化并添加到Markets包中,这不应该发生。

是我的映射不正确,或NHibernate创建实际实体而不是自己的反射类型作为代理对象?

问候, 阿尔瓦罗

回答

3

你的理解是对的NHibernate如何实例化代理和实体正确的。第一次访问该代理实体的任何属性NHibernate将从数据库中加载实体。

您应该尝试监视NHibernates创建的SQL查询,以便查看何时使用诸如NH Profiler或SQL Profiler来调用这些查询。

-1

经过进一步调查,它发现Market类映射在元素内设置了显式的lazy =“false”属性,覆盖了包的自己的代理设置。

全部整理!

相关问题