Как правильно использовать свойства навигации EF4? - PullRequest
0 голосов
/ 19 марта 2011

Я создал базу данных, используя подход модели EF4. В моей модели есть отношение N-к-M между двумя сущностями:

enter image description here

Я заполнил свою базу данных фиктивными данными, включая 3 записи типа Diagnosis и 3 записи типа TreatmentSchema и связи между ними. Вот фрагмент кода, который я использовал для этого:

using(var container = new SmartTherapyContainer()) {
  var diagnosisA = new Diagnosis() { Id = Guid.NewGuid(), Name = "Diagnosis A" };
  var diagnosisB = new Diagnosis() { Id = Guid.NewGuid(), Name = "Diagnosis B" };
  var diagnosisC = new Diagnosis() { Id = Guid.NewGuid(), Name = "Diagnosis C" };
  container.Diagnoses.AddObject(diagnosisA);
  container.Diagnoses.AddObject(diagnosisB);
  container.Diagnoses.AddObject(diagnosisC);

  var schemaA = new TreatmentSchema() { Id = Guid.NewGuid(), Name = "Schema 1" };
  var schemaB = new TreatmentSchema() { Id = Guid.NewGuid(), Name = "Schema 1" };
  var schemaC = new TreatmentSchema() { Id = Guid.NewGuid(), Name = "Schema 1" };
  container.Schemas.AddObject(diagnosisA);
  container.Schemas.AddObject(diagnosisB);
  container.Schemas.AddObject(diagnosisC);

  diagnosisB.TreatmentSchemas.Add(schemaA);
  diagnosisC.TreatmentSchemas.Add(schemaA);
  diagnosisC.TreatmentSchemas.Add(schemaB);
  diagnosisC.TreatmentSchemas.Add(schemaC);

  container.SaveChanges();
}

Я убедился, что ассоциации действительно хранятся в справочной таблице, созданной с помощью сопоставления EF4. Однако, когда я получаю Diagnosis через коллекцию container.Diagnoses позже, его коллекция .TreatmentSchemas всегда пуста.

Я попытался отладить код, сгенерированный EF4, и все, что он делает, это лениво создает указанную коллекцию, но она не заполняет ее связанными объектами. Ayende * Entity Framework Profiler не показывает никаких запросов, генерируемых вообще при обращении к свойству, что заставляет меня поверить, что я здесь что-то не так делаю.

Как я могу получить список связанных TreatmentSchemas?

1 Ответ

2 голосов
/ 19 марта 2011

Свойства навигации не загружаются по умолчанию. Вы должны использовать либо готовую загрузку, либо ленивую загрузку, но поскольку вы используете самопроверяющиеся объекты, ваш выбор - только нетерпеливая загрузка, потому что STE не поддерживают отложенную загрузку . Поэтому, если вы хотите получить экземпляр Diagonstic со всеми связанными с ним обращениями, вы должны позвонить:

var diagnosis = context.Diagnoses.Include("TreatmentSchemas").FirstOrDefault();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...