gpt4 book ai didi

c# - 在 Entity Framework Core 3 中使用 TransactionScope 时 SET IDENTITY_INSERT 不起作用

转载 作者:行者123 更新时间:2023-11-30 16:37:20 26 4
gpt4 key购买 nike

我在 EF Core 3 中使用 TransactionScope 时遇到问题。下面的代码在使用 Database.BeginTransaction 时可以正常工作,但在使用 TransactionScope 时却不行>。下面的代码不起作用:

using (var ts = new TransactionScope(option, new TransactionOptions
{
Timeout = TransactionManager.MaximumTimeout,
IsolationLevel = isolation
}, TransactionScopeAsyncFlowOption.Enabled))
{
Context.Database.ExecuteSqlRaw("SET IDENTITY_INSERT ITEMS ON");
Context.Item.Add(item);
Context.SaveChanges();
}

我得到以下错误

Cannot insert explicit value for identity column in table 'Items' when IDENTITY_INSERT is set to OFF.

此代码确实有效:

using(var ts = Context.Database.BeginTransaction())
{
Context.Database.ExecuteSqlRaw("SET IDENTITY_INSERT ITEMS ON");
Context.Item.Add(item);
Context.SaveChanges();
ts.Commit();
}

如何让它与 TransactionScope 一起工作?

最佳答案

您需要自己打开和关闭连接,否则 EF 会为每个操作打开/关闭。您的 ExecuteRawSql 和您的 SaveChanges 在不同的连接上有效完成。

Context.Item.Add(item);
Context.Database.OpenConnection();
try
{
Context.Database.ExecuteSqlRaw("SET IDENTITY_INSERT ITEMS ON");
Context.SaveChanges();
Context.Database.ExecuteSqlRaw("SET IDENTITY_INSERT ITEMS OFF");
}
finally
{
Context.Database.CloseConnection();
}

引用:https://learn.microsoft.com/en-us/ef/core/saving/explicit-values-generated-properties#explicit-values-into-sql-server-identity-columns

关于c# - 在 Entity Framework Core 3 中使用 TransactionScope 时 SET IDENTITY_INSERT 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58847327/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com