當我們有一個自動遞增的ID列,即通過EF使用SET IDENTITY_INSERT行爲時,是否有辦法強制EF中新實體的ID值?實體框架SET IDENTITY_INSERT
我們的要求是,我們的創建表單必須始終在空表單上填充或保存之前爲其創建的對象顯示新的唯一ID。這個想法是,這個ID可以通過電話讀取給某人,然後用戶可以在通話完成後完成並保存表格。我們可以通過在數據庫中插入一個空行來保留一個ID,然後我們有唯一的列和FK;相反,我製作了一個'下一個ID'表,我們爲了安全而增加了鎖,並且我在對象表中對頂部ID進行了測試,因此不能小心。這個想法是在我們回寫實體時強制使用這個新的ID--但我看不到如何讓EF來完成它。
這是可能的 - 這只是我錯過了什麼?我不認爲這個ID甚至會把它放到插入,所以我不認爲圍繞SaveChanges手動調用SET IDENTITY_INSERT會有所幫助。
或者我還得做點別的嗎?我可以看到替代方案:
- 將我們的ID列更改爲不是身份,並手動控制它:這裏有一個表ID繼承,所以這可能也很棘手。
- 將DB ID和用戶可見ID分隔到單獨的列中,並在那裏記錄我們的唯一ID。
- 空行保留ID,如上;可能需要一些空的變化,並修改我們的數據讀取代碼來忽略這些記錄。
謝謝!這是EF4(使用EDMX和生成的類而不是POCO),以及對於SQL Server 2008以防萬一。
保證ID的唯一方法就是插入它 - 使用「SET IDENTITY INSERT」進行播放不會解決事實上,在將功能切換回來處理約束之前,您將處理潛在的重複。這是否只是需要連續數字的問題? – 2011-01-21 17:22:37
@OMG小馬Ye是的,也許這將是最終的出路。但是,插入的重複ID肯定會是異常情況 - 我們反饋的順序新ID是在具有鎖等的不同表中生成的,因此除非出現意外錯誤,否則將是唯一的。 – Rup 2011-01-21 17:25:53