Проверка на нулевой объект в EF вызывает дополнительный удар по базе данных ... как получилось? - PullRequest
2 голосов
/ 01 октября 2010

Я работаю с Entity Framework ... У меня есть таблица базы данных для Пациент , которая имеет неисполненное отношение внешнего ключа к таблице Employee , поэтому я могу связать менеджерапациенту.

Я создал свою сущность в EF для Пациента , Сотрудника и связи между Пациентом и Сотрудником, которую я называю ManagerEmployee .

Я также создал еще один частичный класс для Patient , который позволит мне легко получить имя сотрудника из моего класса бизнес-объектов, также называемого Patient .

  public string ManagerName
  {
       get { return this.ManagerEmployee == null ? string.Empty : this.ManagerEmployee.Name; }
  }

Итак, у меня есть:

  • Субъект пациента
  • Частичный класс пациента (для получения некоторых данных)
  • Пациент DTO(читает из организации пациента)

Проблема, с которой я столкнулся, заключается в том, что если ManagerId (в данном случае Guid) не связан с сотрудником или не установлен (Guid.Empty) ... несмотря на то, что мне не терпится загрузить, это все равно делает еще один удар по базе данных.

IQueryable<Data.Patient> query = ctx.ObjectContext.Patients.Include("ManagerEmployee");

Так что, если у меня есть 1000 записей, у которых установлено это значение, все хорошо, но еслизначение для ManagerId НЕ установлено ни для одной из этих записей, оно составляет 1 + 1000 обращений к базе данных.

Хотите знать, если у кого-то еще была эта проблема?Может быть некоторая большая проблема с построением моих EF-сущностей и / или ассоциаций, поэтому я открыт для других предложений.

Спасибо!

1 Ответ

2 голосов
/ 13 апреля 2011

Это довольно старое, но если вы еще не нашли решение, я предлагаю отключить отложенную загрузку.Скорее всего, происходит то, что при попытке получить доступ к нулевому свойству происходит отложенная загрузка.См. http://www.asp.net/entity-framework/tutorials/maximizing-performance-with-the-entity-framework-in-an-asp-net-web-application, если вы сначала используете базу данных, или http://www.asp.net/entity-framework/tutorials/reading-related-data-with-the-entity-framework-in-an-asp-net-mvc-application для MVC Code First.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...