Как генерировать свойства навигации с помощью генератора 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 не работает?

685   4  

4 ответов:

Ошибка говорит все:

Система.Данные.Сущность.IDbSet" не содержит определения для "Include" и никакого метода расширения...

Интерфейс просто не имеет метода. Я не уверен, почему эти методы не являются частью интерфейса. Может быть, потому, что IDbSet был введен для облегчения насмешек, а Include - это метод, который очень трудно высмеять.

Вместо этого вы можете использовать один из Include методы расширения в пространстве имен System.Data.Entity. Эти методы определяются на IQueryable(<T>), который является интерфейсом, реализующим IDbSet.

То же самое верно и для другого важного метода, которого нет в интерфейсе IDbSet: AsNoTracking. (Также трудно издеваться - в каком - то смысле-потому что отслеживание трудно издеваться).

Я думаю, что, возможно, вы просто пропускаете утверждение using System.Data.Entity;.

Я решил точно такую же проблему, переустановив Entity Framework.

Update-Package EntityFramework -Reinstall
Проблема заключалась в отсутствии ссылки на EntityFramework.файл DLL.

IDbSet-это устаревший интерфейс Microsoft. Генератор не может быть в dbset.

Обновление до последнего генератора EF Reverse POCO здесь .

Исходный код здесь.

Comments

    Ничего не найдено.