使用实体框架保存大型实体和子项

时间:2014-11-20 21:01:03

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

我需要更新一个有两个孩子的实体,这两个孩子也有两个孩子,这两个孩子都依赖于父母。

                            Job(PK: Jobid)
       Holes(PK: Holeid, FK: Jobid) / Orders(PK: Orderid, FK: Jobid)
Tools(PK: Toolid, FK: Holeid, FK: Orderid) / ToolHoles(PK: Holeid, Orderid)

工具还有7个继承它的孩子。

作业将在保存时存在。该职位可能已经包含或未包含每个子实体中的一个或多个。

我需要能够在一个事务中保存所有这些信息,以便部分信息不会保存到数据库中。

我目前的尝试是使用所有相关信息构建Job实体并调用SaveChanges。如果我正在添加新实体,除了Jobid之外,必须在保存时生成密钥。是我正在努力实现的目标吗?

1 个答案:

答案 0 :(得分:1)

在这里做一些假设,让我知道我是不是基地。如果您的方案如下所示,那么您应该没问题。

var myHoles = new Holes();
var myOrders = new Orders();
var myTools = new Tools();
var myToolHoles = new ToolHoles();

myJob.Holes.Add(myHoles);  //myJob already exists
myJob.Orders.Add(myOrders);

myHoles.Tools.Add(myTools);
myOrders.Tools.Add(myTools);

myHoles.ToolHoles.Add(myToolHoles);
myOrders.ToolHoles.Add(myToolHoles);

db.SaveChanges();

你说“一次交易”,但事实是发生了几次交易。

  • myHolesmyOrders将在适当设置JobId的情况下插入数据库。
  • EF会找出他们的ID
  • 将插入
  • myToolsmyToolHoles,其中HoleIdOrderId设置为第二步中找到的值。