1

如何根据子表中的父表唯一ID向表和子表中添加多个项目,而无需在每次添加行时调用保存更改,只有当用户单击保存按钮时才必须提交更改

4

2 回答 2

3

这取决于您定义实体的方式。如果您使用独立的关联,它会简单地工作。

如果您使用外键关联,则必须为主体实体使用临时键,并将它们设置为依赖实体中的外键属性。父项中的这些临时键必须是唯一的(例如使用负值),EF 会在保存更改时自动将它们替换为实际值。

于 2012-08-13T19:28:57.840 回答
0

实体框架首先插入父记录并使用其自动递增的标识值来设置子项的任何外键值。EF 可以这样做,因为 SQL Server 在事务范围内增加标识列,因此在事务尚未提交时分配新值。(回滚后的新插入显示标识列缺少在回滚事务中分配的值)。

所以做类似的事情没问题

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();

where...是用于设置属性的占位符(没有父 ID)。

于 2012-08-13T13:02:49.460 回答