NHibernate包 - 真正的集合项而不是代理

时间:2010-07-22 09:57:08

标签: c# nhibernate proxy bag

我遇到了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创建了实际的实体而不是它自己的反射类型作为代理对象?

此致 阿尔瓦罗

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:-1)

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

现在全部排序!