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

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是在插入后生成的,并且属性在我的实体中之后会更新。

最佳答案

在执行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();
}


是的,有两次对数据库的调用,但是除非您准备比实体框架更深入,否则别无选择。

关于c# - Entity Framework 5:插入前获取Auto_Increment值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20056088/

10-17 00:43