2016-04-05 1 views
0

Я не знаю, является ли это проблемой EL Lazyness или реальной ошибкой EF, потому что эта нерегулярность случается иногда (примерно 1 раз в 10 раз по тому же коду) Проблема заключается в том, что по некоторым причинам некоторые случайные навигационные свойства (не всегда одинаковые) не загружаются с активной ленивой загрузкой и созданием прокси.LazyLoading слишком ленив, чтобы загрузить некоторые навигационные свойства

Пример представляет собой форму с полями + - 40, которая представляет Person, которая имеет реляционное соединение с множеством других таблиц и других таблиц, в другие таблицы. Я использую ленивую загрузку, потому что мне кажется, что это лучший подход из-за количества таблиц, участвующих в Форме. Проблема в том, что некоторые поля появляются пустым, потому что некоторые nav. свойства не загружаются.

Реальный вопрос: Есть ли кто-нибудь, кто знает причину, по которой EF останавливает ленивую загрузку навигационных свойств или загружает только «половину из них»?

Код примера слишком сложный и частный (предприятие) для обмена здесь.

+1

Обычно Я вижу, что это происходит, когда 'DbContext', который использовался для загрузки объекта, вышел из сферы действия, был удален и/или GC'd. Если вы знаете, что поля должны заполнять форму, почему бы не '.Include()' их? – CodingGorilla

+0

Спасибо CodingGorilla, это обычно действительно, я видел много сообщений, вызванных disposed/Gc, это не тот случай, я уже прокомментировал Dispose() в моем dbcontext. Причина, по которой я не хочу .Include() заключается в том, что приложение довольно обширно и построено на предположении ленивой загрузки. Для Include() все было бы довольно смешно. Кроме того, больше идей? –

ответ

0

описанная выше проблема была решена давно путем перезагрузки всей DbContext, после того, много попыток тогда, я смог найти, что проблема была, если у вас был какой-то объект из другого dbcontext, с этого момента lazzyloading перестает работать (теперь это имеет смысл ...: P)

0

У меня была аналогичная проблема некоторое время назад. Использование .ToList() в конце запроса исправлена ​​проблема для меня:

Попробуйте это:

using(EntityContext db = new EntityContext()) 
{ 
    db.LazyLoadingEnabled = true; 
    List<Persons> persons = db.Persons.ToList(); 
} 
+0

Здравствуйте, в моем случае есть только один «Человек», который не загружает все свойства, а не список людей, кроме того, что я попробовал .ToList(). FirstOrDefault(), чтобы получить одного человека, некоторые свойства все еще делают не загружается. Это не решение для меня. –

 Смежные вопросы

  • Нет связанных вопросов^_^