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

Entity framework 在EF6中存储复杂的分离对象图,entity-framework,save,entity-framework-6,detach,Entity Framework,Save,Entity Framework 6,Detach,我有目前的情况: 我首先使用EF6代码,并创建了如下数据模型: public class MainObject{ ..some properties IList<SubObject> SubObjects{get;set;} } public class SubObject{ ..some properties IList<SubSubObject> SubSubObjects{get;set;} } public class SubObject{

我有目前的情况:

我首先使用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;}
}
public类main对象{
…一些属性
IList子对象{get;set;}
}
公共类子对象{
…一些属性
IList子对象{get;set;}
}
公共类子对象{
…一些属性
IList子对象{get;set;}
}
基本上我有一个主对象,它有0到多个子对象,子对象和子对象之间有多对多的关系

我正在创建一个MVC应用程序,所以我的正常程序流程是,用户请求一个基本上使用main对象作为其数据模型的页面。然后,用户与页面交互并根据自己的意愿更改、添加或删除子对象和子对象,然后单击“保存”。保存时,objectgraph被发送回控制器,并且根据用户在客户端所做的更改,它看起来是正确的。现在我的问题是:

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

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

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

如果您能帮我把这个问题解决得更顺利,我们将不胜感激。

我最终用它来解决这个问题,效果非常好!这确实应该内置到EF中,但在它实现之前,这是一个很好的替代品

为了解决上述问题中给出的示例,这将确保正确保存分离的图形(假设我有一个
main对象
main,我想保存它):


你可能想试试。“我从来没有试过,但它看起来很有希望。”GertArnold——事实上,我昨晚试过,它以一种非常好的方式解决了我的问题。非常推荐。如果你想把这个评论变成一个答案,我很乐意将其标记为已接受:)你介意回答你自己的问题(在StackOverflow可以)并简要说明你做了什么吗?与我相比,你现在是专家了!我很乐意投票。@GertArnold-可能是个好主意:)完成了。我实际上也有同样的问题,但我到目前为止在GraphDiff的实现上没有成功?您能否提供一些关于EF设置的更多信息?您正在使用的版本、是否启用更改跟踪等?也许这可以帮助我解决这个问题。
context.UpdateGraph(main, map =>map
  .AssociatedCollection( m => m.SubObjects, with => with
    .AssociatedCollection( s => s.SubSubObjects)
  )
);

context.SaveChanges();