3

好了,所以在實體框架6我會在一個聲明中有一個關鍵和屬性數據庫生成:的EntityFramework核心流利的模型創建密鑰和物業

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它允許您進一步配置PK,喜歡HasName的關係約束名,或特定的數據庫屬性,如ForSqlServerHasNameForSqlServerIsClustered