我正在使用NHibernate 3.3.1并发现了非常有趣的问题.
在我的域模型中,我定义了两个类:Carriage和CarriageRequest,互相引用.因为延迟加载是打开的,所以当我访问carriage.CarriageRequest时 – 它指向一个代理对象.好的,可以.但是当我调用CarriageRequest类中定义的任何方法时,“this”引用第三个对象实例.
在我的域模型中,我定义了两个类:Carriage和CarriageRequest,互相引用.因为延迟加载是打开的,所以当我访问carriage.CarriageRequest时 – 它指向一个代理对象.好的,可以.但是当我调用CarriageRequest类中定义的任何方法时,“this”引用第三个对象实例.
例:
class CarriageRequest { public virtual void Test(CarriageRequest instance) { Debug.WriteLine(Object.ReferenceEquals(this,instance)); // prints FALSE } } class Carriage { public virtual CarriageRequest CarriageRequest { get; set; } } ... var carriage = session.Get<Carriage>(123); carriage.CarriageRequest.Test(carriage.CarriageRequest);
所以它看起来像NHibernate代理包装原始对象并将所有方法调用转发给包装对象.在这种情况下如何使用“==”?
我需要做这样的事情:
var shipment = (from sh in Carriage.Shipments where sh.CarriageRequest == this & sh.Warehouse == waybill.Warehouse select sh).FirstOrDefault();
此代码在代理对象内执行,因此’shipment’始终为null,因为’sh.CarriageRequest == this’始终为false.因为sh.CarriageRequest是一个代理,这是一个包装的原始实例.
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。