【问题标题】:Why can I not see the property Local when using Entity Framework?为什么在使用实体框架时看不到属性 Local?
【发布时间】:2012-02-22 22:57:12
【问题描述】:

我知道我遗漏了一些非常明显的东西,但是为什么在使用 EF 上下文时我看不到属性 Local?网上的典型例子如下:

context.Parents.Local

但我看不到 Local 属性。现在据我了解,Local 是 DbSet 类的成员,我认为我没有在我的应用程序中使用 DbSet。我所知道的是我已经添加了对 EntityFramework 的引用,拥有using System.Data.Entity 并且我熟悉的其他一切工作都很好。除了Local 不存在,我确实需要为我的DataGridView 提供一些排序功能。

救命!

【问题讨论】:

  • Local 是您数据库中的一列吗(因此是您实体的属性)? Parents 是数据库中的表(因此是实体)还是关联?

标签: c# winforms entity-framework data-binding


【解决方案1】:

如果您查看上下文类的自动生成代码,它是继承自 DbContext 还是 ObjectContext?

如果它是从 ObjectContext 继承的,则需要采取更多步骤。

  • 在模型设计图面上,右键单击->添加代码生成项
  • 从左侧菜单中选择“代码”
  • 选择“ADO.NET DbContextGenerator”
  • 将项目命名为与您的模型相同的名称(例如:“MyModel”)
  • 点击添加

两个 *.tt 文件将添加到您的项目中,名为 MyModel.tt 和 MyModel.Context.tt。

重新编译后,再次查看自动生成的上下文代码,它现在应该继承自 DbContext。您的 Parents 对象现在将是 DbSet 类型而不是 ObjectSet,您现在可以使用 Local 属性。

【讨论】:

  • 我可能应该更新这个问题,但这是我需要做的。我什至没有安装 ADO.NET DbContext 插件,也没有使用它生成任何代码。一旦我有了这个,一切都很好。
【解决方案2】:

DbContextDbSet 等是 Entity Framework 4.1/4.2 的一部分,除其他外,作为 EntityFramework NuGet 包提供。根据this,仅使用 .NET Framework,您就只有现在所谓的“Core EF Runtime”:

总之,你需要安装EF 4.1/4.2。

【讨论】:

  • 我很确定这就是我所缺少的。谢谢!
  • 看来我很快就谈过了。我已经从 NuGet 安装了实体框架,但我想我可能有错误的版本。我安装了 4.2 版,但我仍然没有可用的 Local 属性。我错过了using 子句吗?正如我之前所说,我有using System.Data.Entity...
  • 如果我同时引用了 EntityFramework 和 System.Data.Entity,会导致冲突吗?我确定我安装了最新版本的 EF,但该属性仍然不可见。
  • 我的模型是使用“数据库优先”创建的吗?
  • 仅仅添加对 NuGet 包的引用是行不通的。您需要生成支持的 C# 代码,以便它使用“简化的”DbContext/DbSet API 而不是“核心”ObjectContext/ObjectSet。执行此操作的 T4 模板应包含在 EF 4.2 中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多