如何使用EntityFramework反向POCO生成器生成导航属性?

时间:2014-05-27 01:13:46

标签: c# entity-framework c#-4.0 poco texttemplate

我之前使用的是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 个答案:

答案 0 :(得分:1)

我想也许你只是错过了using System.Data.Entity;声明。

答案 1 :(得分:1)

IDbSet是Microsoft不推荐使用的界面。现在,生成器使用DbSet。

更新到最新的EF Reverse POCO Generator here

源代码为here

答案 2 :(得分:0)

错误说明了一切:

  

System.Data.Entity.IDbSet'不包含'Include'的定义,也没有扩展方法......

interface只是没有方法。我不确定为什么这些方法不是界面的一部分。也许是因为IDbSet被引入以促进嘲弄,Include是一种非常难以模拟的方法。

相反,您可以使用命名空间System.Data.Entity中的Include extension methods之一。这些方法在IQueryable(<T>)上定义,IDbSetIDbSet实现的接口。

另一个不在{{1}}界面中的重要方法也是如此:AsNoTracking。 (在某种意义上也很难嘲笑 - 因为跟踪很难模仿)。

答案 3 :(得分:0)

我解决了重新安装实体框架的完全相同的问题。

Update-Package EntityFramework -Reinstall

问题是缺少对EntityFramework.dll的引用。