3

ИТАК в рамках сущности 6 я бы имел поколение базы данных ключей и свойства в одном заявлении:EntityFramework Ядра Fluent Model Builder Key и недвижимости

modelBuilder.Entity<Function>() 
       .HasKey(x => x.Id) 
       .Property(x => x.Id) 
       .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); 

В рамочной сущности ядра (7) это не работает:

modelBuilder.Entity<Function>() 
       .HasKey(x => x.Id) 
       .Property(x => x.Id) 
       .ValueGeneratedNever(); 

Ошибка: «KeyBuilder" не содержит определения для „собственности“, а метод расширения „собственности“, принимающего первый аргумент типа „KeyBuilder“»:

Должно ли это быть два отдельных заявления, как показано ниже, или есть способ иметь его в одном, как вы могли бы в EF6?

protected override void OnModelCreating(ModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Function>() 
        .HasKey(x => x.Id); 

    modelBuilder.Entity<Function>() 
        .Property(x => x.Id) 
        .ValueGeneratedNever(); 
} 

ответ

4

Да, они отделены друг от друга в EF Core.

Причина в том, что метод EF6 позволяет указать столбцы PK и ничего больше, поэтому возвращается EntityTypeConfiguration<TEntityType> (то же, что и цель, полученная от вызова Entity<...>), и поэтому вы можете продолжать плавно настраивать тип объекта.

Однако метод EF Ядро возвращает другой тип, называемый KeyBuilder, который позволяет дополнительно настроить ПК, как HasName для реляционного имя ограничения, или конкретные базы данных атрибутов, как ForSqlServerHasName и ForSqlServerIsClustered т.д.

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