我目前有一个表,定义如下:
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/