Как сгенерировать навигационные свойства с помощью 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; заявление.

IDbSet является устаревшим интерфейсом от Microsoft. Генератор теперь использует DbSet.

Обновите EF Reverse POCO Generator здесь.

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

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

Update-Package EntityFramework -Reinstall

Проблема была в отсутствующей ссылке на EntityFramework.dll.

Другие вопросы по тегам