实体框架5:在插入之前获取Auto_Increment值

时间:2013-11-18 19:25:51

标签: c# sql-server asp.net-mvc entity-framework

我目前有一个如下定义的表:

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,并且我的实体中的属性在之后得到更新。

1 个答案:

答案 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();
}

是的,有两次调用数据库,除非你准备比实体框架更深入,否则别无他法。