Как генерировать свойства навигации с помощью генератора EntityFramework Reverse POCO?
Ранее я использовал EF Power Tools, который включал опцию ReverseEngineerCodeFirst, а в процессе переключения на EntityFramework обратный генератор POCO.
Реализация:
using (var db = new DbContext())
{
var user = db.Users
.Include("MembershipType")
.FirstOrDefault(u => u.UserName == userName);
. . .
}
Используя генератор POCO, я теперь получаю ошибку в строке .Include(...):
'Система.Данные.Сущность.IDbSet' не содержит определения для
'Включить', а не метод расширения 'включить', принимающий первый аргумент
типа - Система.Данные.Сущность.IDbSet ' может быть найден (вы
отсутствует директива using или ссылка на сборку?)
В созданном контексте (и IContext):
DbSet<User> Users { get; set; } // Users
В шаблоне context tt я изменил экземпляры IDbSet на DbSet, что исправило проблему, но мне любопытно, почему, если IDbSet является интерфейсом для DbSet, Почему IDbSet не работает?
4 ответов:
Ошибка говорит все:
Система.Данные.Сущность.IDbSet" не содержит определения для "Include" и никакого метода расширения...
Интерфейс просто не имеет метода. Я не уверен, почему эти методы не являются частью интерфейса. Может быть, потому, что
IDbSetбыл введен для облегчения насмешек, аInclude- это метод, который очень трудно высмеять.Вместо этого вы можете использовать один из
Includeметоды расширения в пространстве именSystem.Data.Entity. Эти методы определяются наIQueryable(<T>), который является интерфейсом, реализующимIDbSet.То же самое верно и для другого важного метода, которого нет в интерфейсе
IDbSet: AsNoTracking. (Также трудно издеваться - в каком - то смысле-потому что отслеживание трудно издеваться).
Я решил точно такую же проблему, переустановив Entity Framework.
Проблема заключалась в отсутствии ссылки на EntityFramework.файл DLL.Update-Package EntityFramework -Reinstall
Comments