如何使用代码优先实体框架在 ASP.Net MVC3 中重新加载多对多导航属性

Posted

技术标签:

【中文标题】如何使用代码优先实体框架在 ASP.Net MVC3 中重新加载多对多导航属性【英文标题】:How to reload a many to many navigation property in ASP.Net MVC3 using code first Entity Framework 【发布时间】:2011-08-19 07:22:33 【问题描述】:

我正在尝试将代码优先实体框架与 ASP.Net MVC3 与 POCO 类一起使用。当涉及的实体具有涉及多对多关系的 NavigationProperty 时,我目前正在努力解决如何从 DbUpdateConcurrencyException 中恢复。

假设实体名为Player,并有一个名为Clubs 的导航属性。一个玩家可以是许多俱乐部的成员,而俱乐部可以有许多成员。

假设用户在编辑(当然,这是一个独立的网络应用程序)他的俱乐部会员资格时,管理员取消了他的一些俱乐部会员资格。在调用SaveChanges() 时,用户代码将正确抛出DbUpdateConcurrencyException

我现在要做的是重新加载玩家实体包括他的俱乐部。使用dbContext.Entry(player).Reload() 重新加载玩家很容易,但这不会用管理员干预后他可用的俱乐部重新填充俱乐部导航属性。

请帮忙!

【问题讨论】:

能否请您用源代码支持您的问题? 【参考方案1】:

我之前遇到过类似的问题,我为我的案例找到的最佳/最简单的解决方案 - 考虑到 EF 如何决定缓存和重新加载实体 - 是创建一个全新的 DbContext 实例并使用它重新加载数据.

【讨论】:

谢谢!但是,如果它是唯一的解决方案,那将是非常糟糕的,对吧? 嗯,这对我的场景来说是最简单的。不过,我记得当时正在研究其他一些想法。我会看看我是否能找到这些并用更多选项更新我的答案。 :)【参考方案2】:

这应该可行。

dbContext.Entry(player).Reference(a => a.Clubs).Load()

【讨论】:

以上是关于如何使用代码优先实体框架在 ASP.Net MVC3 中重新加载多对多导航属性的主要内容,如果未能解决你的问题,请参考以下文章

使用带有实体框架代码优先和 ASP.NET MVC 3 和 mvc miniprofiler 的 SQL Server CE 时出现问题

如何使用trackerenableddbcontext在asp.net mvc5和代码中的实体框架中实现审计跟踪

实体框架代码优先和 ASP.NET 成员资格

如何在 Asp.Net 5 (MVC 6) 中使用实体框架 6.x

asp.net mvc实体框架代码先将外键与不同名称关联

如何在我的实体框架和 ASP.NET MVC 项目中重构 connectionString?