Microsoft.EntityFrameworkCore.DbUpdateException:保存实体更改时发生错误。有关详细信息,请参阅内部异常。 ---> Microsoft.Data.SqlClient.SqlException (0x80131904):当 IDENTITY_INSERT 设置为 OFF 时,无法在表“Books”中插入标识列的显式值。 在 Microsoft.Data.SqlClient.SqlCommand.<>c.b__211_0(Task
1 result) at System.Threading.Tasks.ContinuationResultTaskFromResultTask
2.InnerInvoke()
无法通过代码向数据库表中插入值。 但是当我直接使用 SSMS 时,插入操作可以工作,为此我必须使用 将 IDENTITY 插入 {TABLE_NAME} 打开。
无法在 API 中使用 POST 请求。
我想要一个解决方案,这样它就不会要求一次又一次地打开身份插入。
这是我自己最近的数据迁移项目的一个示例:
dbContext.Database.BeginTransaction();
dbContext.Database.ExecuteSqlRaw($"SET IDENTITY_INSERT {nameof(MarineParkZone)} ON");
dbContext.SaveChanges();
dbContext.Database.ExecuteSqlRaw($"SET IDENTITY_INSERT {nameof(MarineParkZone)} OFF");
dbContext.Database.CommitTransaction();
这是 EF 设置的一部分:
var serviceCollection = new ServiceCollection().AddDbContext<EyeOnTheReefDbContext>(options => options.UseSqlServer(destinationConnectionString,
providerOptions =>
{
// EnableRetryOnFailure cannot be used because we require a transaction to set IDENTITY_INSERT.
//providerOptions.EnableRetryOnFailure();
providerOptions.UseNetTopologySuite();
}));
注意评论:
EnableRetryOnFailure 无法使用,因为我们需要事务来设置 IDENTITY_INSERT。