3

我之前使用的是包含ReverseEngineerCodeFirst选项的EF Power Tools,并且正在切换到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”不包含“Include”的定义,并且找不到接受“System.Data.Entity.IDbSet”类型的第一个参数的扩展方法“Include”(您是否缺少 using 指令还是汇编参考?)

在生成的上下文(和 IContext)中:

    DbSet<User> Users { get; set; } // Users

在上下文 tt 模板中,我更改了解决问题的实例IDbSetDbSet但我很好奇为什么,如果IDbSet是 的接口DbSet,为什么不起作用IDbSet

4

4 回答 4

1

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

于 2014-11-28T13:20:40.000 回答
1

IDbSet 是 Microsoft 已弃用的接口。生成器现在改用 DbSet。

在此处更新到最新的 EF 反向 POCO 生成器。

源代码在这里

于 2016-02-01T12:20:00.910 回答
0

错误说明了一切:

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

接口只是没有方法。我不确定为什么这些方法不是接口的一部分。可能是因为IDbSet引入了便于模拟,并且Include是一种很难模拟的方法。

相反,您可以使用namespace 中的Include扩展方法System.Data.Entity之一。这些方法是在 上定义的IQueryable(<T>),它是一个IDbSet实现的接口。

另一个不在IDbSet接口中的重要方法也是如此:AsNoTracking。(也很难模拟 - 在某种意义上 - 因为跟踪很难模拟)。

于 2014-11-28T16:43:53.313 回答
0

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

Update-Package EntityFramework -Reinstall

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

于 2015-05-08T11:46:37.077 回答