C# 使用实体框架保存大型实体和子实体
我需要更新一个实体,它有两个孩子,这两个孩子都依赖于父母C# 使用实体框架保存大型实体和子实体,c#,asp.net-mvc,entity-framework,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) Tools还有7个子项继承自它 保存时该作业将已存在。作业可能包
Job(PK: Jobid)
Holes(PK: Holeid, FK: Jobid) / Orders(PK: Orderid, FK: Jobid)
Tools(PK: Toolid, FK: Holeid, FK: Orderid) / ToolHoles(PK: Holeid, Orderid)
Tools还有7个子项继承自它
保存时该作业将已存在。作业可能包含,也可能尚未包含每个子实体的一个或多个
我需要能够在一个事务中保存所有这些信息,以便不将部分信息保存到数据库中
我当前的尝试是使用所有相关信息构建作业实体,并调用SaveChanges。如果要添加新实体,则必须在保存时为除Jobid之外的所有实体生成键。我试图实现的目标可能实现吗?在这里做一些假设,如果我偏离了基准,请告诉我。如果您的场景如下所示,那么您应该很好
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
将被插入到数据库中,并适当设置它们的myorder
JobId
- EF将了解他们的ID是什么
和myTools
将与myToolHoles
和HoleId
一起插入,并使用第二步中找到的值进行设置OrderId
将代码包装在中,并使用BeginTransaction()
、提交()
和回滚()
。所以我需要将工具/工具孔映射到孔和订单?我以前也尝试过,但在检测到冲突更改时出错。它们现在是如何关联的?我发现我没有正确映射到孔。我添加它们的方式与添加订单的方式相同,这是不正确的。谢谢你的帮助。希望我能利用这些知识让它工作。