![](/img/trans.png)
[英]Cannot insert explicit value for identity column when IDENTITY_INSERT is set to OFF. (Entity Framework Core)
[英]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 將為每個操作打開/關閉。 您的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();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.