EF 7身份插入問題

entity-framework entity-framework-core

我必須能夠在我的列表“final_zones”中設置我想要添加的實體的主鍵。我有一個控制器構造函數如下:

    public UtilController(CFETSContext context)
    {
        _context = context; 
    }
     ......Then in a web api method.........
        using (var transaction = _context.Database.BeginTransaction())
        {
            _context.Database.ExecuteSqlCommand(@"SET IDENTITY_INSERT [CFETSWeb].[dbo].[Zone] ON");             

            _context.SaveChanges();
            transaction.Commit();
        }


       using (var transaction = _context.Database.BeginTransaction())
        {             
            _context.Zones.AddRange(final_zones);
            _context.SaveChanges(); //ERROR HERE
            transaction.Commit();
        }

無論我做什麼,我似乎都無法啟動IDENTITY_INSERT。我收到以下錯誤:

{"Cannot insert explicit value for identity column in table 'Zone' when IDENTITY_INSERT is set to OFF."}

我似乎無法讓它關閉。我可以在控制器中向我的數據庫添加實體,所以我知道其他一切都在工作。我已經嘗試過這樣做,沒有交易也有相同的結果。

 _context.Database.ExecuteSqlCommand(@"SET IDENTITY_INSERT [CFETSWeb].[dbo].[Zone] ON"); 
_context.Zones.AddRange(final_zones);
        _context.SaveChanges();

有任何想法嗎?我對接下來的嘗試感到茫然。謝謝。

熱門答案

我解決了以下問題:

       using (var dbContextTransaction = _context.Database.BeginTransaction())
        {
            try
            {
                _context.Database.ExecuteSqlCommand(@"SET IDENTITY_INSERT [CFETSWeb].[dbo].[Zone] ON");
                _context.Zones.AddRange(final_zones);
                _context.SaveChanges();          

                dbContextTransaction.Commit();
            }
            catch (Exception e)
            {
                dbContextTransaction.Rollback();
            }
        }

注意:您必須按表執行此操作。 IDENTITY_INSERT一次只能為1個表設置,因此您可以這樣做或在同一事務中將其切換為OFF。

此外,IDENTITY_INSERT必須在一個事務中,因為它只在事務期間保持開啟狀態。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow