2013-11-14 4 views
0

мне было интересно, если это где вообще возможно, чтобы иметь ключ, который автоматически генерируется так:EF Code First Auto генерировать столбец 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; } 

Но я хотел бы, чтобы это с Number быть KEY формат &: Code_Year_Id:

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

Может ли кто-нибудь помочь мне с этим? Или у кого-нибудь есть полезная документация, которая может предоставить мне достойное решение?

Перед тем, как сохранить новый элемент я мог бы просто создать ряд сам (в коде), но может быть 2-х человек сберегательные новый пункт @ то же время, и я не хочу, исключение на дубликат ключа ..

Zarkos

+1

Ключевая проблема столкновения по существу нефиксирована, если вы хотите иметь естественные ключи, и они могут столкнуться. – Casey

ответ

2

Как правило, использование значимого значения для ключа - плохая идея. Вам будет намного лучше использовать последовательное значение, единственная цель которого - обеспечить ссылочную целостность. Если по другой причине: если ваш ключ не является последовательным, вы будете получать много фрагментации по вашему индексу при вставке новых записей.

Если вы хотите быть уверены, что получите уникальное значение, вы можете создать таблицу SQL, содержащую ваше последнее значение, а затем UDF или sproc, который принимает текущее значение в этой таблице, увеличивает его до следующего значение, а затем возвращает это значение.

Смежные вопросы