我需要更新一个有两个孩子的实体,这两个孩子也有两个孩子,这两个孩子都依赖于父母。
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之外,必须在保存时生成密钥。是我正在努力实现的目标吗?
答案 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();
你说“一次交易”,但事实是发生了几次交易。
myHoles
和myOrders
将在适当设置JobId
的情况下插入数据库。myTools
和myToolHoles
,其中HoleId
和OrderId
设置为第二步中找到的值。