在EF6中存储复杂的分离对象图

Øyv*_*hen 7 entity-framework save detach entity-framework-6

我有当前的情况:

我首先使用EF6代码,并创建了这样的数据模型:

public class MainObject{
  ..some properties
  IList<SubObject> SubObjects{get;set;}
}

public class SubObject{
  ..some properties
  IList<SubSubObject> SubSubObjects{get;set;}
}

public class SubObject{
  ..some properties
  IList<SubObject> SubObjects{get;set;}
}
Run Code Online (Sandbox Code Playgroud)

所以基本上我有一个主对象,它有0到多个子对象,并且子对象和子对象之间存在多对多的关系.

我正在创建一个MVC应用程序,所以我的正常程序流程是用户请求一个基本上使用MainObject作为其数据模型的页面.然后,用户与页面交互并根据需要更改,添加或删除子对象和子对象,然后单击"保存".在保存时,对象图被发送回控制器,并且根据用户在客户端进行的更改看起来是正确的.现在我的问题如下:

如何以良好的方式将其存储回数据库.

我需要将我的对象附加到上下文中,但我不知道哪些对象是新的,修改的或删除的.

我已经编写了一些现在部分有效的代码,但它变得如此丑陋以至于我真的不想走这条路.是否有可能以某种方式从数据库中获取相关的对象图,并让EF将两个图相互比较,然后将相关的更改保存到数据库中?

任何有助于使这个更顺利的帮助将不胜感激.

Øyv*_*hen 7

我最终使用GraphDiff为我解决这个问题,它的效果非常好!这真的应该建立在EF中,但是直到它,它才是一个很好的替代品.

为了解决上面我的问题中给出的例子,这将确保正确保存分离图(假设我有一个MainObject我要保存的名为main):

context.UpdateGraph(main, map =>map
  .AssociatedCollection( m => m.SubObjects, with => with
    .AssociatedCollection( s => s.SubSubObjects)
  )
);

context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)