gpt4 book ai didi

c# - 如何在 EF 6.1.1 中将 DbContext 用于 EntityDatasource

转载 作者:太空宇宙 更新时间:2023-11-03 15:47:56 24 4
gpt4 key购买 nike

我有一个使用 .NET 框架 v4.5 和 EF v6.1.1 的 ASP.NET Web 窗体应用程序。

我正在使用新的 EntityDatasource用于绑定(bind)和更新 的控件。以前,我使用的是 ObjectContext,现在我将其更改为使用 DbContext。进行此更改后,由于类型转换无效,我遇到了构建错误:

e.Context = new SchoolEntities();

这是显而易见的,因为 EntityDatasource EventArgs e"Context" 属性属于 ObjectContextSchoolEntities 属于 DbContext 类型。

我还在使用 e.Context 属性进行一些 CRUD 操作,例如:

var school = e.Context.Schools.FirstOrDefault();
e.Context.Departments.Add(...);
e.Context.SaveChanges();

为了修复错误,我从 DbContext 中获取了 ObjectContext,如下所示:

e.Context = ((IObjectContextAdapter)_ctx).ObjectContext;

此处 e 是 Microsoft.AspNet.EntityDataSource 的事件参数。

我还添加了 EntityDataSource_ContextCreating() 事件来解决类型转换问题:

protected void EntityDataSource_ContextCreating(object sender, Microsoft.AspNet.EntityDataSource.EntityDataSourceContextCreatingEventArgs e)
{
if (_ctx == null)
_ctx = new SchoolEntities();
e.Context = ((IObjectContextAdapter)_ctx).ObjectContext;
}

进行此更改后,我摆脱了构建错误,但它导致了其他几个错误。

问题

  1. 如果我正在使用 e.Context = ((IObjectContextAdapter)_ctx).ObjectContext; 然后在取回实体时(var school = (School)e.Entity ;) 在 EntityDatasource 的更新事件中我丢失了导航属性。

  2. 我没有找到任何方法来避免在 EntityDatasource 中使用 ObjectContext。我想远离 ObjectContext,因为它已在 EF 7 中完全删除。

我尝试过的

因此,为了解决所有这些问题,我目前添加了一个页面级上下文对象,例如:

private SchooEntities _ctx;

我从 EntityDatasource 的上下文创建事件中删除了 e.Context = ((IObjectContextAdapter)_ctx).ObjectContext;。我还删除了使用 e.Context 属性进行 CRUD 操作的现有代码。我使用了页面级别的 context(_ctx) 变量而不是 e.Context 并且一切正常。所以这证实了罪魁祸首是 e.Context = ((IObjectContextAdapter)_ctx).ObjectContext;

问题

  1. 如何有效地将 DbContext 与 EntityDatasource ( http://www.nuget.org/packages/Microsoft.AspNet.EntityDataSource/) 控件一起使用?

  2. 对于我的情况,为了取回导航属性(同时从 eventargsvar school = (School)e.Entity; 检索实体)我将做哪些更改?

  3. 如果我不使用 EntityDataSource 控件的 e.Context 属性,那么我认为根本没有使用 EntityDatasource 吗? (仅供引用:我仅将 EntityDatasource 控件用于BindUpdate 操作)

非常感谢任何帮助。

最佳答案

为确保填充导航属性,您需要在 EntityDataSource 的 [Include] 属性中将要填充的那些设置为逗号分隔列表。

关于c# - 如何在 EF 6.1.1 中将 DbContext 用于 EntityDatasource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27292415/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com