亚洲欧洲视频,三男玩一女摸吃奶,久久久久久久片,精品中文一区二区三区,美女在线国产,国产有码视频,亚洲激情五月

威勢網絡,為您的企業(yè)和團隊注入互聯網活力!
服務熱線:138-9741-0341

The instance of entity type 'XXX' cannot be tracked because another insta....

發(fā)布日期:2022/10/6 作者: 瀏覽:1071

EF同時打開兩個實例,

     public  IActionResult Client(Client client)
        {

        var client_temp = _ConfigurationDbContext.Clients.Include(i => i.AllowedGrantTypes).Where(c => c.Id==client.Id).FirstOrDefault();

         .....
        }

    看以上代碼,前臺模型綁定時提交了一個Client實例,我們又用代碼自己從數據庫中創(chuàng)建了一個實例client_temp ,這樣,EF就同時跟蹤維護著兩個一模一樣的實例,當我們對Client進行編輯后,再保存,EF就拋出異常:

System.InvalidOperationException:“The instance of entity type 'Client' cannot be tracked because another instance with the same key value for {'Id'} is already being tracked. When attaching existing entities, ensure that only one entity instance with a given key value is attached. Consider using 

    這時候,我們只需要改一下代碼,告訴EF,不要跟蹤我們自己創(chuàng)建的client_temp 即可,用以下寫法:

var client_temp = _ConfigurationDbContext.Clients.AsNoTracking().Include(i => i.AllowedGrantTypes).Where(c => c.Id==client.Id).FirstOrDefault();

//注意AsNoTracking()的用法,可以使EF框架只跟蹤一個實例,

然后再保存就不報錯了。

   其實我們也可以用另一種方法去解決這個問題,前面的代碼創(chuàng)建了兩個數據庫實例,一個是前臺提交過來的,另一個是我們自己手動從數據庫中拉去的,我們對前臺提交過來的模型進行修改的保存,對數據庫拉取的置之不理,就報了上面的錯誤,其實我們可以對數據庫中拉取的client_temp 進行修改去保存,而對前臺提交過來,模型自動綁定的Client進行丟棄,這樣就不會報上面的錯了。



下拉加載更多評論
最新評論
暫無!