[英]EF6: How to generate a unique number automatically based on entity Id
考慮這樣一個實體:
public class Document
{
public int Id { get; set; }
public long code { get; set; }
// Rest of Props
}
我需要生成一個唯一的長代碼,並且我更喜歡根據Id生成它。
一個簡單的經典但不安全的解決方案是獲取最后一個ID,並將其增加一個並使用,但是我正在尋找一種更好的解決方案,例如計算列或將代碼生成分配給數據庫的任何其他方法。
現在,我正在嘗試借助事務處理來確保以前的經典解決方案安全。
有更好的建議嗎?
限制每個表的單個標識字段的解決方法只是將“ Documents
表標准化為另一個包含code
字段和任何相關字段的表。
為了獲得用於code
標識的基本值(基於日期),可以簡單地用最低期望值播種。 不知道底層的RDMS,但是對於MySQL來說,它是http://dev.mysql.com/doc/refman/5.1/en/example-auto-increment.html
所以,像
Documents 1-1 DocumentCodes
哪里:
DocumentCodes
-------------
code : identity (seeded to desired base value)
documentId : int FK UNIQUE
允許code
字段(實際包含在之前 )單獨生成實際Document實體的另一種替代方法如下:
DocumentCodes
-------------
code : identity PK
Documents
---------
id : identity
code : id FK
實際的code
字段可以播種到所需的基數,或者根據我的其他答案用作計算屬性的一部分。
要基於代碼搜索文檔:
給定問題的范圍並且不了解整個上下文,最簡單的解決方案是將代碼字段作為計算屬性 。
即通過將種子值(基於截止日期)與Id字段連接起來,在應用程序中計算代碼字段。
要基於代碼搜索文檔,您只需將ID與給定的代碼分開,然后使用它在“文檔”表中進行搜索。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.