在保存更改之前,它将为负。只需在上下文中调用Save
。
_dbContext.Locations.Add(location);
_dbContext.Save();
保存后,您将拥有数据库中的ID。您可以使用事务,在获得ID后出现问题时回滚。
另一种方法是不使用数据库内置的IDENTITY字段,而是自己实现它们。当您有大量批量插入操作时,这可能非常有用,但是它也有代价 - 实现起来并不容易。
显然,这不是一个错误,而是一种特性:https://github.com/aspnet/EntityFrameworkCore/issues/6147
覆盖这个行为并不太困难,可以像这样进行:
public class IntValueGenerator : TemporaryNumberValueGenerator<int>
{
private int _current = 0;
public override int Next(EntityEntry entry)
{
return Interlocked.Increment(ref _current);
}
}
public class CustomContext: DbContext
{
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
foreach (var type in modelBuilder.Model.GetEntityTypes().Select(c => c.ClrType))
{
modelBuilder.Entity(type, b =>
{
b.Property("Id").HasValueGenerator<IntValueGenerator>();
});
}
base.OnModelCreating(modelBuilder);
}
}