【问题标题】:Storing a complex detached object graph in EF6在 EF6 中存储复杂的分离对象图
【发布时间】:2014-02-10 12:43:04
【问题描述】:

我有当前的场景:

我首先使用 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;}
}

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

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

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

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

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

我们将不胜感激任何有助于使这更顺畅的帮助。

【问题讨论】:

  • 您可能想试试GraphDiff。我从未尝试过,但它看起来很有希望。
  • @GertArnold - 实际上,我昨晚试过了,它以非常好的方式解决了我的问题。所以强烈推荐。如果您想将该评论作为答案,我很乐意将其标记为已接受:)
  • 您介意回答您自己的问题(在 StackOverflow 上可以)并简要说明您做了什么吗?和我比起来,你已经是专家了!我很乐意投票。
  • @GertArnold - 可能是个好主意 :) 完成。

标签: entity-framework save entity-framework-6 detach


【解决方案1】:

我最终使用GraphDiff 为我解决了这个问题,而且效果很好!这确实应该内置到 EF 中,但在它内置之前,这是一个很好的替代品。

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

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

context.SaveChanges();

【讨论】:

  • 我实际上也有同样的问题,但到目前为止我的 GraphDiff 实施没有成功?您能否提供有关您的 EF 设置的更多信息?您正在使用的版本,是否启用了更改跟踪等?也许这可以帮助我解决这个问题。 stackoverflow.com/questions/22098433/…
  • 这太棒了!我很想使用它,但我找不到 EF Core 的相同功能。有人知道 EF 核心版本吗?
猜你喜欢
  • 2011-10-19
  • 1970-01-01
  • 1970-01-01
  • 2011-11-05
  • 2018-02-16
  • 1970-01-01
  • 1970-01-01
  • 2017-04-21
相关资源
最近更新 更多