Восстановление имени индексов Sql Server делает недействительным жестко заданное значение в EF

#c# #entity-framework-core

#c# #entity-framework-core

Вопрос:

В файле контекста EF у меня есть жестко заданное имя ключа / имя индекса OnModelCreating . Администратор базы данных перестроил эти индексы / ключи с другими именами. Должен ли я снова обновлять эти ссылки в коде? или есть какой-либо другой подход?

 protected override void OnModelCreating(ModelBuilder modelBuilder){

modelBuilder.Entity<Customert>(entity =>
{
  entity.HasKey(e => e.custId)
        .HasName("PK__cust__4E739DAA");
}

}
  

Комментарии:

1. Почему вы указали имя ключа в первую очередь, если администратор базы данных может его изменить? Почему бы не использовать собственное имя вместо жестко заданного автоматически созданного (т.Е. Случайного)?

2. Кстати, перестройка индекса не изменит его имя. Администратор базы данных либо переименовал его, либо удалил и создал заново.

3. Администратор базы данных тоже меняет свое имя при перестройке, а не под моим контролем. могу ли я игнорировать строку hasName? почему это свойство существует? Я не хочу ничего жестко кодировать.

Ответ №1:

В качестве опции вы можете использовать Key атрибут непосредственно для свойства объекта, например

 using System.ComponentModel.DataAnnotations;
public class Customer
{
    [Key]
    public int CustomerId {get;set;}
}
  

Документация

Комментарии:

1. «PK__cust__4E739DAA» жестко задано. Имя столбца не является проблемой.

2. @user6069595 не вводите автоматически сгенерированные имена в жестком коде. Используйте правильные имена, которые не заставляют администраторов баз данных переименовывать их ‘