2016-06-09 74 views
0

我使用代碼優先遷移創建發票表,該表需要具有唯一的發票號。我不想讓這個領域成爲我的主要關鍵。我首選的方法是使用Guid作爲發票號碼,這樣每次插入發票項目時都會創建一個唯一值。我可以生成隨機字符串,但我不想編寫邏輯來創建隨機字符串。使用C#Guid作爲唯一的非主鍵字段

請注意,我不想爲此安裝任何外部庫。 我正在做我與Fluent API的映射,而不是數據註解。 請將其納入您的答案。

這對我來說可以實現只使用Guid列嗎?

在此先感謝。

+0

是的,這可能是一個構造函數。 guid的sql類型是唯一標識符,您應該調用newid函數來生成值 –

+4

想象用戶通過電話提供發票號碼:) – CoderHawk

+0

http://stackoverflow.com/questions/967170/are-sequential-numbers-necessary – CoderHawk

回答

0

當在SQL Server中定義的表,將該列定義唯一標識符NOT NULL DEFAULT NEWID()

+0

謝謝你爲你的答案。我使用Code First Migrations,所以我實際上並沒有在SQL Server中定義表。我必須這樣做,以便從我的Fluent API映射推斷出NOT NULL DEFAULT – strizzwald

+0

我相信你必須在Migration的Up和Down函數中手動修改表。有關詳細信息,請參閱https://andy.mehalick.com/2014/02/06/ef6-adding-a-created-datetime-column-automatically-with-code-first-migrations/這是關於日期欄,但應該同樣適用於指導。 –

+0

布拉德利是正確的。首先使用代碼並不排除您在初始創建後更改表定義。此外,無論如何,你應該控制你的數據庫項目。 –

0

在你的發票類的實體,如下面創建一個列;

public Guid InvoiceNumber {get;set;} 

public Invoice(){ 
     InvoiceNumber = Guid.NewGuid(); 
} 

在newing了發票,你應該有一個預填充的Guid

+0

謝謝,這也會處理重複的主鍵。換句話說,如果我這樣做,那麼有可能兩次生成相同的Guid? – strizzwald

+0

相同的GUID出現兩次的機會非常非常不可能.. http://stackoverflow.com/questions/39771/is-a-guid-unique-100-of-the-time – uk2k05