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