簡體   English   中英

在 Entity Framework Core 3 中使用 TransactionScope 時,SET IDENTITY_INSERT 不起作用

[英]SET IDENTITY_INSERT not working when using TransactionScope in Entity Framework Core 3

我在 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();
}

我收到以下錯誤

當 IDENTITY_INSERT 設置為 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 將為每個操作打開/關閉。 您的ExecuteRawSqlSaveChanges在不同的連接上有效地完成。

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://docs.microsoft.com/en-us/ef/core/saving/explicit-values-generated-properties#explicit-values-into-sql-server-identity-columns

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM