2015-10-26 106 views
0

我有這個實體(無論是在數據庫和Entity Framework)的唯一編號/值:產生一列不具有UNIQUE約束

public class LanguageValue 
{ 
    public int ID { get; set; } 
    public long Key { get; set; } // bigint in database 
    public int LanguageID { get; set; } // FK with a Language table in database 
    public string Value { get; set; } // nvarchar(MAX) in database 
    public bool Active { get; set; } // bit in database 
} 

我已經看過這篇文章,但我的問題是有點不同:EF6: How to generate a unique number automatically based on entity Id

我的Key列沒有唯一的約束,因爲可以有多個具有相同Key值的行。例如:

ID Key LanguageID Value 
--------------------------------------------------- 
1 1  1    Name in Language 1 
2 1  2    Name in Language 2 

我不能使用映射表來執行,而不是一個Key FK因爲多個表使用同一表格(產品的名稱,類別名稱,文章的內容)。

現在無論何時我需要插入ProductCategory記錄,我都需要插入相應的語言值。但是,我還沒有找到一種方法來生成其中獨一無二的密鑰,並且,如果兩次插入同時進行處理(例如,同時添加產品和類別),則需要更加獨特, 。

我正在考慮Guid,這應該是我與RNG的安全賭注,還是有更好的方法來實現它?

+0

ID是您的獨特識別碼。這與您想要做的有什麼不同? – JamieD77

+0

對於每個插入操作符,我需要插入2行(或更多取決於多少種語言),使用相同的'Key',但除了這2行外,其他行都不會有'Key'值。所以它不是ID。 –

+0

我想在一個事務中插入所有'Product'及其2個'LanguageValue'記錄,所以在EntityFramework中,我還沒有該ID。 –

回答

1

好的,我認爲我的問題來自不良的數據庫設計。我分隔的LanguageValue表分成兩個表,如下面的圖,並實現2名職業選手,以前的設計沒有:

enter image description here

  1. 我現在可以安全地插入LanguageKeyIDENTITY
  2. 我現在可以獲得FK產品和類別的NameLanguageKey,這是以前不可能的,因爲Key不是唯一的。
+0

很高興你找到了一個好的結果。順便說一句,恕我直言,只有在您的OP中呈現LanguageValue表/類,我認爲你模糊了你的問題。上面的擴展圖說明了你以後所做的更好。無論如何,再加上1分享最終解決方案 –