Я использую Entity Framework 4 и у меня несколько проблем с отложенной загрузкой.
У меня есть 3 объекта, и каждый из них содержится друг в друге.
CarSetup будет содержать сущность Car, которая будет содержать сущность Event. Они все лениво загружены.
Я создал упрощенный модульный тест для воспроизведения проблемы.
CarSetup carSetup = carSetupContext.CreateObject<CarSetup>();
Car car = Load("car1");
carSetup.Car = car;
Я получаю аварию, когда назначаю машину объекту carsetup. На самом деле происходит сбой в методе Equals объекта Car.
public override bool Equals(object obj)
{
if(obj == null)
{
return false;
}
return this.Event.Equals(((Car)obj).Event);
}
Если я быстро просмотрю сущность до вызова метода equals, все подчиненные сущности будут загружены, и проблема не возникнет.
Когда я назначаю существующую машину для настройки машины, платформа загружает все существующие CarSetups для этой машины и вызывает у них мой метод "Equals" Однако, поскольку отложенная загрузка включена, Событие в автомобиле является нулевым, что является нормальным. Когда он пытается получить доступ к свойству Event, загрузка НЕ происходит и происходит сбой. Я проверил свойство "this" в методе equals, и оно имеет тип "System.Data.Entity.DynamicProxies.Car". Я также проверил, и EventId Guid правильно установлен в сущности автомобиля.
Кто-нибудь имеет представление о том, что происходит?
РЕДАКТИРОВАТЬ: после выполнения еще большего тестирования, если я вызову метод равных вручную:
car.Equals(car);
Все работает отлично. Это происходит только тогда, когда Entity Framework решает загрузить отношения и автоматически вызывает метод Equals.
Спасибо