2013-11-14 37 views
0

我想知道,如果它在那裏在所有可能有汽車這樣生成的密鑰:EF代碼優先自動生成列ID

  • CBE_2012_1
  • CBE_2012_2
  • CBE_2012_3
  • CBE_2013_1
  • CBE_2013_2
  • CBA_2013_1
  • CBA_2013_2
  • CBC_2013_1

我現在有這個在我的課,用的ID是標識與自動編號:

[Key] 
    public int Id { get; set; } 
    public DateTime Date { get; set; } 
    public string Code { get; set; } 
    public string Name { get; set; } 

但我想用數是關鍵&格式有這樣的:Code_Year_Id:

​​

有人能幫助我嗎? 還是有人有幫助文件,可以提供一個體面的解決方案嗎?

之前,我保存一個新的項目我可以創建許多我自己(在代碼中),但也可能有2人保存一個新的項目@同時,我不想在重複鍵異常..

Zarkos

+1

如果你想擁有自然鍵並且它們可能發生碰撞,那麼關鍵碰撞問題實質上是不可修復的。 – Casey

回答

2

一般來說,使用一個有意義的鍵值是一個壞主意。使用順序價值將會更好,但唯一的目的是確保參照完整性。如果沒有其他原因:如果你的密鑰不是連續的,當你插入新的記錄時,你將在索引中得到很多碎片。

如果確實希望獲得唯一的值,可以創建一個保存最後一個值的SQL表,然後獲取該表中當前值的UDF或sproc,將它遞增到下一個值值,然後返回該值。