我有一個Linq到SQL數據庫表,我使用ExecuteCommand來執行截斷。在截斷之後,我需要向表中添加一個初始記錄,但代碼失敗時出現'重複ID'問題,表明截斷不是立即的。如何在linq之後立即提交更改到sql truncate
有沒有辦法強制截斷立即發生,還是等到所有更改都已提交之後再執行插入操作?
(補充:方案失敗後,如果我重新運行它 - 表已被截斷和核心工作正常插入新行)
我有一個Linq到SQL數據庫表,我使用ExecuteCommand來執行截斷。在截斷之後,我需要向表中添加一個初始記錄,但代碼失敗時出現'重複ID'問題,表明截斷不是立即的。如何在linq之後立即提交更改到sql truncate
有沒有辦法強制截斷立即發生,還是等到所有更改都已提交之後再執行插入操作?
(補充:方案失敗後,如果我重新運行它 - 表已被截斷和核心工作正常插入新行)
截斷是立即但LINQ to SQL不知道你做了什麼。它不能解釋原始SQL。所以它不知道它已經加載到內存中的所有實體現在都已經在數據庫中了。
數據庫和DataContext的內存中狀態現在不同步。
ID在L2S身份管理器中重複使用,因爲只有一個具有給定鍵的實體可以共存於同一個DataContext中(這絕對有意義)。如果仔細閱讀錯誤,您會注意到它不是SqlException。
最簡單的解決方案是在截斷執行後使用新的DataContext。更復雜的解決方案將涉及刷新加載實體的狀態。我不確定這是如何工作的,所以你需要自己研究。
感謝您的回覆。我會嘗試這個並回來標記。當然,我聽起來很對! – Simon
你能在這裏提供你的代碼嗎?如果沒有,嘗試'context.ExecuteCommand(「TRUNCATE TABLE Entity」);' – opewix
context.SaveChanges()之間的截斷和插入? – tschmit007
我已經在使用幾乎完全一樣的executecommand語句,並在之後執行context.SubmitChanges()。在Linq to SQL中不存在SaveChanges。然後嘗試使用context.TableName.InsertOnSubmit()添加一條新記錄。 – Simon