【问题标题】:How to generate navigation properties with EntityFramework Reverse POCO Generator?如何使用 EntityFramework Reverse POCO Generator 生成导航属性?
【发布时间】:2014-05-27 01:13:45
【问题描述】:

我之前使用的是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' 不包含对 'Include' 并且没有扩展方法 'Include' 接受第一个参数 可以找到“System.Data.Entity.IDbSet”类型的(你是 缺少 using 指令或程序集引用?)

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

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

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

【问题讨论】:

  • 我计划从生成器中删除 IDbSet 并改用 DbSet。见efreversepoco.codeplex.com/workitem/89
  • 我现在使用 DbSet 并从生成器中删除了接口 IDbSet 的使用。所以你应该可以使用你原来的.Include 代码。

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


【解决方案1】:

我认为您可能只是缺少using System.Data.Entity; 声明。

【讨论】:

    【解决方案2】:

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

    更新到最新的 EF 反向 POCO 生成器here

    源代码是here

    【讨论】:

      【解决方案3】:

      错误说明了一切:

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

      interface 只是没有方法。我不确定为什么这些方法不是接口的一部分。可能是因为IDbSet是为了方便mock而引入的,而Include是一个很难mock的方法。

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

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

      【讨论】:

        【解决方案4】:

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

        Update-Package EntityFramework -Reinstall
        

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

        【讨论】:

          猜你喜欢
          • 2017-06-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-05-23
          • 1970-01-01
          • 1970-01-01
          • 2011-01-03
          • 2013-02-10
          相关资源
          最近更新 更多