【问题标题】:ContextCreating method in EntityDataSource cannot convert Entities to ObjectContextEntityDataSource 中的 ContextCreating 方法无法将实体转换为 ObjectContext
【发布时间】:2012-11-08 03:45:11
【问题描述】:

使用 EntityFramework,我在 App_Code\DAL 中创建了一个 EntityDataModel(.edmx 文件)。在向导中,我将实体命名为“DLGDBEntities”。我在 .aspx 中有许多 EntityDataSources,我将 OnContextCreating 属性设置为“UseSurveyContext”,如下所示:

protected void UseSurveyContext(object sender, EntityDataSourceContextCreatingEventArgs e)
{
   e.Context = surveyContext;
}

surveyContext的设置代码如下:

DLGDBEntities surveyContext;

在 Page_Load 中:

surveyContext = new DLGDBEntities();

以上所有代码看起来都与我在每个教程中看到的代码相同(例如:http://msdn.microsoft.com/en-us/library/cc668193.aspx#1),我可以发誓我已经让它工作了。

但是,现在我收到错误消息:Cannot implicitly convert type 'DAL.DLGDBEntities' to 'System.Data.Objects.ObjectContext'

我做错了什么,为什么以前会起作用?

【问题讨论】:

  • 你的 DLGDBEntites 是从 DbContext 派生的吗?
  • 是的,因为向导就是这样做的。它应该来自 ObjectContext 吗?
  • EntityDataSource 控件仅适用于 ObjectContext。您可以使用 ((IObjectContextAdapter)context).ObjectContext 从 DbContext 中获取 ObjectContext - 希望它会有所帮助。
  • 非常感谢帕维尔。这有效,我正在再次编译。但我仍然很困惑。我问题中的 msdn 链接与我所做的完全相同。为什么它不必将实体强制转换为 ObjectContext?
  • 您必须使用 VS2012。在 VS2012 中,默认代码生成器已更改为生成 POCO 实体和 DBContext,而不是从 VS2010 中默认的 EntityObject 和 ObjectContext 派生的实体。 msdn文章是为VS2010写的

标签: c# entity-framework objectcontext


【解决方案1】:

EntityDataSource 控件仅适用于 ObjectContext。您可以使用((IObjectContextAdapter)context).ObjectContext 从您的 DbContext 中获取您的 ObjectContext。 请注意,在 Visual Studio 2012 中,默认代码生成器已更改为生成 POCO 实体和 DBContext,而不是从 Visual Studio 2010 中默认的 EntityObject 和 ObjectContext 派生的实体。

编辑

正如 Sven 在 cmets 中指出的,一个新的 EF6 兼容版本的 EntityDataSourceControl 已经发布,它采用 EF6 DbContext 实例。

【讨论】:

  • 啊,是的,我确实玩过 VS12。切换回 VS2010,甚至没有将其视为可能的罪魁祸首。因此,重新生成覆盖了现有代码。嗯。 ContextCreating 方法是否仍然使用 VS2012 返回 ObjectContext?非常感谢您的帮助。
  • 我一定错过了你的评论。您需要删除 tt 模板,然后在设计器中右键单击设计器表面,然后在属性中将代码生成策略从 None 更改为 Default 以获取基于 EntityObject 的实体和 ObjectContext 派生的上下文。
  • 目前有一个新的 Microsoft ASP.NET EntityDataSource 控件可通过 NuGet 用于 EF >= 6.0.0。它接受新的 DbContext。
  • 我正在使用 VS13 和 Entities6,但这不起作用。我尝试按照建议打开属性,但代码生成策略是 T4 并且是只读的。
猜你喜欢
  • 2013-04-04
  • 2021-11-23
  • 2014-03-22
  • 1970-01-01
  • 1970-01-01
  • 2022-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多