2012-08-13 52 views
1

如何根据父表添加多个项目到表和子表中在每次添加行时不调用保存更改的唯一标识在子表中保存按钮更改的用户点击必须致力于EF5递增唯一ID,不调用savechanges直到用户请求保存

+1

使用自动递增的列,EF将为您处理它。 – 2012-08-13 09:03:39

+0

嗨,我倒过来从现有的数据库设计的代码,数据库表列ID设置为身份增量,但在表类中您指定自动递增选项或属性 – 2012-08-13 09:13:21

+0

你不会 - 这是默认的整数键但应用程序中的值不会自动递增,只有在保存更改后才设置。 – 2012-08-13 09:15:48

回答

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)的占位符。

3

这取决于你如何定义实体的方式。如果您使用的是independent associations,它会简单地工作。

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

+0

请问您可以将我从哪里获得这些信息的文档链接到我? – michelle 2013-09-23 13:03:55