我目前有一个如下定义的表:
CREATE TABLE (
ID int identity(1,1) primary key not null,
field_one nvarchar(max) not null
)
我正在使用Entity framework 5将记录插入此表中。这方面有效,我正确插入记录。
field_one是基于当前id的值。例如,如果我有最大ID为5的记录,则下一条记录将插入(6,ABC6),然后插入(7,ABC7),依此类推。
我遇到的是桌子是空的。身份是7,所以下一条记录应该是(8,ABC8)。我需要在插入之前获取auto_increment的id,以便我在表空时应用我需要的计算。
我怎么能这样做,因为我知道在插入之后生成了id,并且我的实体中的属性在之后得到更新。
答案 0 :(得分:5)
在执行SaveChanges
之前,您无法获得正确的身份。这是因为它是由插入的实体框架设置的。
但是,您的问题有一个解决方法。
考虑一下:
// wrap in a transaction so that the entire operation
// either succeeds or fails as a whole
using(var scope = new TransactionScope())
using(var context = new DbContext()) {
var item = new Item();
context.Items.Add(item);
context.SaveChanges();
// item.ID now contains the identifier
item.field_one = string.Format("abc{0}", item.ID);
// perform another save.
context.SaveChanges();
// commit transaction
scope.Complete();
}
是的,有两次调用数据库,除非你准备比实体框架更深入,否则别无他法。