IDENTITY_INSERT 设置为 OFF,无法在 .NET 版本 8 代码中连接 SSMS SQL 服务器

问题描述 投票:0回答:1

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 请求。

我想要一个解决方案,这样它就不会要求一次又一次地打开身份插入。

c# .net-8.0
1个回答
0
投票

这是我自己最近的数据迁移项目的一个示例:

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。

© www.soinside.com 2019 - 2024. All rights reserved.