0

我创建了一个使用实体框架进行数据库访问的编辑器。编辑器是一个通过 JavaScript 工作的客户端编辑器。当用户单击保存按钮时,JavaScript 调用我的 ASP.NET MVC 方法,并将数据作为 JSON 字符串。数据是一个包含节点列表的对象。我在 EF 中使用继承来允许节点具有不同的类型。从浏览器发送的 JSON 由 MVC 自动转换为 DTO 对象。然后我基于 DTO 对象创建 EF 对象。我的问题是如何保存对所有对象的修改?

现在我执行以下操作:

// Convert my DTO object to a EF db object
Document dbDoc = dtoDoc.ToEFDocument();

using (MyEntities db = new MyEntities())
{
    db.ApplyCurrentValues("Documents", doc);
    db.SaveChanges();
}

这有效,但它只更新文档对象中的属性(而不是在节点集合中所做的更改)。

有一个简单的解决方案吗?

4

1 回答 1

0

您的 DTO 还必须跟踪有关用户所做更改的信息。您必须跟踪:

  • 更新了哪些实体
  • 删除了哪些实体
  • 添加了哪些实体
  • 添加了哪些独立关联(多对多或一对多没有映射的 FK)
  • 删除了哪些独立关联

在服务器上获得此信息后,您必须使用它来正确设置要保存到数据库的每个实体的状态。在 EF 中没有自动执行此操作的机制,并且ApplyCurrentValues仅适用于单个实体(不适用于整个实体图)。

在没有更改信息的情况下执行此操作通常需要从数据库加载所有已修改的数据并从 DTO 更新它们,而不是从 DTO 创建断开连接的实体。

于 2012-12-03T10:57:13.337 回答