a.k.a Как мы можем создать несколько столбцов идентификации в Code First?
Из-за производительности кластеров, общая рекомендация состоит в том, чтобы использовать столбец с автоинкрементным целым числом вместо GUID, созданного с помощью newid().
Чтобы объявить столбец как автоинкремент, вы должны указать его с помощью аннотации [DatabaseGenerated(DatabaseGeneratedOption.Identity)].
Но вы можете иметь только одно удостоверение в таблице.
Итак, начиная с базовой модели, например:
public abstract class ModelBase {
    // the primary key
    public virtual Guid Id { get; set; }
    // a unique autoincrementing key
    public virtual int ClusterId { get; set; }
}
как мы настроим его так, чтобы:
- Гид автоматически создается базой данных, а не кодом
 -  
ClusterIdавтоинкрементно -  Код элемента Entity Framework Сначала не выбрасываются всевозможные ошибки, например:
- Модификации таблиц, в которых столбец первичного ключа имеет свойство "StoreGeneratedPattern", установленное в "Computed", не поддерживается. Вместо этого используйте шаблон "Идентификация".
 
 
FYI, если вы хотите автоматически сгенерировать его в коде, вы можете пропустить аннотацию в поле Id и сделать что-то вроде:
public abstract class AbstractContext : DbContext {
  /// <summary>
  /// Custom processing when saving entities in changetracker
  /// </summary>
  /// <returns></returns>
  public override int SaveChanges()
  {
      // recommended to explicitly set New Guid for appropriate entities -- http://msdn.microsoft.com/en-us/library/dd283139.aspx
      foreach (var entry in ChangeTracker.Entries<ModelBase>().Where(e => e.State == EntityState.Added) ) {
          // only generate if property isn't identity...
          Type t = entry.Entity.GetType();
          var info = t.GetProperty("Id").GetCustomAttributes(
              typeof(DatabaseGeneratedAttribute), true).Cast<DatabaseGeneratedAttribute>().Single();
          if (info.DatabaseGeneratedOption != DatabaseGeneratedOption.Identity) {
              entry.Entity.Id = Guid.NewGuid(); // now we make it
          }
      }
      return base.SaveChanges();
  }
}