如何根据子表中的父表唯一ID向表和子表添加多个项,而不是每次添加行时都调用保存更改,只有当用户单击保存按钮更改时才必须提交< / p>
答案 0 :(得分:3)
这取决于您定义实体的方式。如果您使用的是independent associations,它将会起作用。
如果使用外键关联,则必须使用临时键作为主体实体,并将它们设置为依赖实体中的外键属性。父级中的这些临时键必须是唯一的(例如使用负值),EF会在保存更改时自动将它们替换为实际值。
答案 1 :(得分:0)
实体框架首先插入父记录并使用其自动递增的标识值来设置子项的任何外键值。 EF可以这样做,因为SQL服务器会增加事务范围内的标识列,因此在事务尚未提交时会分配新值。 (回滚后的新插入显示标识列错过了回滚事务中分配的值。)
所以做
这样的事情没问题var cust = new Customer { ... };
context.Customers.AddObject(cust); // (or Add() with DbContext).
var ord = new Order { ... };
ord.OrderLines.Add(new OrderLine { ... });
cust.Orders.Add(ord);
context.SaveChanges();
其中...
是用于设置属性的占位符(没有父ID)。