我正在使用实体框架4,并且有一些延迟加载的问题。 我有3个实体,每个都包含在另一个中。 Carrepup将包含一个Car实体,它将包含一个Event实体。他们都被懒加载。实体框架和延迟加载的问题
我创建了一个简单的单元测试来重现问题。
CarSetup carSetup = carSetupContext.CreateObject<CarSetup>();
Car car = Load("car1");
carSetup.Car = car;
当我将汽车分配给carsetup对象时,发生碰撞。它实际上在Car实体的Equals方法中崩溃。
public override bool Equals(object obj)
{
if(obj == null)
{
return false;
}
return this.Event.Equals(((Car)obj).Event);
}
如果我在调用equals方法之前快速查看实体,所有子实体都会加载并且不会发生问题。
当我将现有汽车分配给汽车设置时,框架加载该汽车的所有现有汽车设置,并调用我的“Equals”方法。但是,由于启用了延迟加载,Car中的事件为空,这是正常的。当它试图访问Event属性时,不会发生加载并且崩溃。我已经在equals方法中检查了“this”属性,它的类型是“System.Data.Entity.DynamicProxies.Car”。我也检查过并且EventId Guid在汽车实体中正确设置。
任何人有任何想法发生了什么?
编辑:
car.Equals(car);
一切完美:做了一些更多的测试,如果我把我的equals方法manualy后。只有在实体框架决定加载关系并自动调用Equals方法时才会发生。
感谢
有出错了作为回报的括号......等于方法。可能只是一个错字,因为这甚至没有编译,也不能成为你问题的原因。 – Slauma 2010-12-13 18:55:51
谢谢你指出。我的实体稍微复杂一些,所以我没有真正注意到这个问题。 – autoexec 2010-12-14 08:35:45