我在看来源,看起来有点奇怪。这是2010年1月26日的最后一次变动
get
{
- if (propertyValue is ToOne)
- {
- // both many-to-one and one-to-one are represented as a
- // Property. EntityPersister is relying on this value to
- // determine "lazy fetch groups" in terms of field-level
- // interception. So we need to make sure that we return
- // true here for the case of many-to-one and one-to-one
- // with lazy="no-proxy"
- //
- // * impl note - lazy="no-proxy" currently forces both
- // lazy and unwrap to be set to true. The other case we
- // are extremely interested in here is that of lazy="proxy"
- // where lazy is set to true, but unwrap is set to false.
- // thus we use both here under the assumption that this
- // return is really only ever used during persister
- // construction to determine the lazy property/field fetch
- // groupings. If that assertion changes then this check
- // needs to change as well. Partially, this is an issue with
- // the overloading of the term "lazy" here...
- ToOne toOneValue = (ToOne)propertyValue;
- return toOneValue.IsLazy && toOneValue.UnwrapProxy;
- }
+ // NH Specific: Hibernate doesn't make a distinction between
+ // lazy and no-proxy, but NHibernate does. While Hibernate tracks
+ // just whatever a property is lazy, we need to track lazy/no-proxy seperatedly.
+
return isLazy;
}
因此,这取决于您使用的版本,但是如果您将其映射为
noproxy
(即展开)。这给了你什么?
var to1 = configuration.GetClassMapping(typeof(Order))
.ReferenceablePropertyIterator.FirstOrDefault(p=>p.Name=="Customer")
.Value as NHibernate.Mapping.ToOne;
to1.IsLazy.ShouldBeTrue();
to1.UnwrapProxy.ShouldBeFalse();