当我从DTO构建EF对象时,如何将EF对象层次结构保存到db?

时间:2012-12-02 16:28:01

标签: c# asp.net entity-framework asp.net-mvc-4

我创建了一个使用Entity Framework进行数据库访问的编辑器。编辑器是一个客户端编辑器,可以通过JavaScript工作。当用户单击保存按钮时,JavaScript将数据作为JSON字符串调用我的ASP.NET MVC方法。数据是包含节点列表的对象。我在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();
}

这可以工作,但它只更新文档对象中的属性(而不是在节点集合中进行的更改)。

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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