一個新的實體,我們有一個實體,角色,標有屬性[DatabaseGenerated(DatabaseGeneratedOption.None)。到目前爲止,我們已經使用種子將實體種入數據庫。但是現在我們要創建一個新頁面讓用戶添加/更新角色。將新的實體添加到數據庫的正確方法是什麼? 實體框架會自動執行嗎?或者我首先需要獲取最大id(一個簡單的int列)並將其設置在新實體上?如果是這樣,在併發性方面是否安全?有沒有一種正確的方法可以保證安全?如何添加標有[DatabaseGenerated(DatabaseGeneratedOption.None)
2
A
回答
1
Is there a right way to be concurrency safe?
既然你明確說明
[DatabaseGenerated(DatabaseGeneratedOption.None)]
您禁用併發安全數據庫自動生成的ID的(主鍵/身份)。
那麼你的選擇是:
- 啓用數據庫生成的ID的
- 使用自然鍵
- 花費了大量的時間創建一個行爲像數據庫自動生成的ID的系統。
- 你可以做的另一件事就是將PK改爲uniqueidentifier,但是如果你有FK關閉,那麼這樣做效果不好。然後你可以創建一個插入的新GUID,而不用擔心它。 (@Daniel Lorenz的建議,看評論)
實體框架在這裏沒有太多的幫助。 也許你可以詳細說明爲什麼數據庫生成的ID被禁用。
2
如果使用SqlBulkCopy類來播種數據,則可以使用數據庫自動生成的id,從而使您可以使用兩全其美(這對於播種大量數據也更有效)。
相關問題
- 1. Convention for DatabaseGeneratedOption.None
- 2. 默認值DatabaseGenerated
- 3. 如何在實體框架中有條件地生成DatabaseGenerated GUID
- 4. 爲什麼`DatabaseGeneratedOption.None`存在?
- 5. 如何添加標題並添加列?
- 6. ASP.NET vNext DataAnnotations DatabaseGenerated不工作
- 7. 如何添加Tablayout圖標
- 8. 如何添加圖標+ URL
- 9. 如何添加標籤欄?
- 10. 如何徽標添加到
- 11. 如何爲標籤添加標籤
- 12. Gmap3:如何給標記添加標題?
- 13. 如何將標籤添加到沒有標籤的解析樹?
- 14. 如何在現有標記下添加Google地圖標記
- 15. 如何添加帶有下標的表格視圖節標題?
- 16. ,如何在現有的標籤中添加標籤?
- 17. iOS interfaceBuilder - 如何添加下標字體如何添加下標字體
- 18. 如何將圖標添加到現有的exe文件(默認沒有圖標)?
- 19. Zend_Form - 添加CSS類::如何添加css類來Zend_Form標籤?
- 20. 如何將徽標添加到Bootstrap的加標導航
- 21. AnyChart。如何添加|刪除標記?
- 22. 如何添加標籤到電網ExtJs4
- 23. 如何向FAKE目標添加說明?
- 24. 如何添加數字到「h2標籤」
- 25. 如何使用xmldocument添加asp標籤?
- 26. 如何添加動態標籤
- 27. html5音頻標籤如何添加src?
- 28. 如何將圖標添加到JFrame中
- 29. 如何將標記添加到implicit_plot?
- 30. 如何在Spinner內添加圖標
我們需要有一些表格(比如我的文章中的Roles表格)填充了與其他舊錶格中的值匹配的值。現在我們需要能夠向其中的一些添加新行。順便說一句,這些表仍然有一個主鍵,名爲ID,它只是不是一個標識列。 – ashilon
你可能想檢查這個帖子,我認爲你可以嘗試的最好的辦法是暫時禁用Id生成,插入你的行重新啓用它。我不知道如何重置種子(身份號碼),但我認爲這將是最簡單的選擇。重新創建自動數據庫標識插入可能是大型複雜項目中的一大難題。如果它很小,可以鎖定它,獲取並插入最高的+1。它會工作。 http://stackoverflow.com/questions/13086006/how-can-i-force-entity-framework-to-insert-identity-columns – Stefan
你可以做的另一件事就是將PK改爲uniqueidentifier,但如果你有FK關閉,那麼這將不會工作得很好。然後你可以創建一個插入的新GUID,而不用擔心它。 –