为啥 Entity framework Entity Master Details Entity Edit

Posted

技术标签:

【中文标题】为啥 Entity framework Entity Master Details Entity Edit【英文标题】:why Entity framework Entity Master Details Entity Edit为什么 Entity framework Entity Master Details Entity Edit 【发布时间】:2011-06-26 08:44:09 【问题描述】:

我使用带有存储库和工作单元模式的实体框架来处理 MVC 项目, 我正在尝试在编辑操作(主详细信息)中编辑可变长度集合,例如这篇文章中的示例http://ivanz.com/2011/06/16/editing-variable-length-reorderable-collections-in-asp-net-mvc-part-1

我的问题是每次提交表单编辑操作子集合数据库表复制子集合行并将旧的外键设置为空,并成功修改主实体。 我检查主实体的实体状态是否已断开(子集合也已断开)。

我已经解决了循环抛出子集合并将其状态更改为修改或添加或删除的问题,但我需要知道什么是自动检测更改或不将实体状态更改为已分离的最佳解决方案。

谢谢

【问题讨论】:

【参考方案1】:

EF 上下文不知道您的客户端做了哪些更改,并且 EF 没有找到这些更改的机制。处理这种情况只有两种方法:

如您所知,手动设置对象图中每个实体的状态(这不是解决方法,它是 official solution)。 首先从数据库中加载实体图并使用TryUpdateModel 让MVC 为您合并新状态和旧状态,如here 所述。

【讨论】:

我尝试使用 TryUpdateModel 工作正常,但仍然存在一个问题,它会复制 DB 表上的子行,每次执行更新操作时都会在子集合 Db 表上复制行,将所有旧行外键设置为 null以及具有正确父外键值的新行。 您是否正在加载实体及其子实体? 我认为它会删除所有子实体(将外键值设置为 NULL)然后重新插入。

以上是关于为啥 Entity framework Entity Master Details Entity Edit的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 Entity Framework Code First 代理集合为空,为啥我不能设置它?

为啥要使用 Attach 来更新 Entity Framework 6?

为啥在我运行迁移时 Entity Framework 包会自动更新?

为啥我必须为 Code First / Entity Framework 提供无参数构造函数

为啥 Entity Framework 6 会为简单的查找生成复杂的 SQL 查询?

为啥Entity Framework没有在使用SingleOrDefault时生成的SQL中添加“where”?