1

我在使用 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 应该创建一个与我的市场类型不同的代理对象,其中只有身份密钥,没有其他设置。

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

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

问候, 阿尔瓦罗

4

2 回答 2

3

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

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

于 2010-07-22T10:04:24.483 回答
-1

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

现在都整理好了!

于 2010-07-22T10:40:05.817 回答