Вопрос

В настоящее время я узнаю немного больше о Linq-To-Entities - особенно в данный момент об активной и ленивой загрузке.

proxy.User.Include("Role").First(u => u.UserId == userId)

Предполагается, что он загружает пользователя вместе со всеми ролями, которые у него есть. У меня есть проблема, но у меня также есть вопрос. Это просто простая модель, созданная для изучения L2E

У меня сложилось впечатление, что это было сделано для того, чтобы все печаталось строго - так почему я должен писать "Роль"? Похоже, что если бы я изменил имя таблицы, это не привело бы к ошибке компиляции ...

Моя ошибка заключается в следующем:

The specified type member 'Roles' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported.
<Ч>

Приведенное ниже решение позволяет мне написать код:

proxy.User.Include(u => u.Role).First(u => u.UserId == userId)

Что НАМНОГО лучше!

Это было полезно?

Решение

<Ол>
  • Включить - это подсказка для активной загрузки, это не приводит к принудительной загрузке.
  • Всегда проверяйте свойство IsLoaded, прежде чем ссылаться на что-то, что, как вы надеетесь, было загружено с помощью Include.
  • Есть способы поместить строго типизированный объект в оператор include, но нет решения, доступного для этой проблемы, из коробки с Entity Framework. Google что-то вроде: Entity Framework ObjectQueryExtension Включить
  • Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top