質問: ですから、エンティティフレームワーク6では、キーとプロパティのデータベース生成を1つのステートメントで行いました: ``` modelBuilder.Entity() .HasKey(x => x.Id) .Property(x => x.Id) .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); ``` エンティティフレームワークのcore(7)では、これはうまくいきません: ``` modelBuilder.Entity() .HasKey(x => x.Id) .Property(x => x.Id) .ValueGeneratedNever(); ``` *エラー: '' KeyBuilder 'に' Property 'の定義がなく、' KeyBuilder 'タイプの最初の引数を受け入れる拡張メソッド' Property 'がありません:* **これは以下のように2つの独立したステートメントでなければならないのですか、EF6のように1つにする方法がありますか?** ``` protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity() .HasKey(x => x.Id); modelBuilder.Entity() .Property(x => x.Id) .ValueGeneratedNever(); } ```
回答: はい、EFコアでは別です。 理由は、EF6メソッドではPK列などを指定できるため`EntityTypeConfiguration` ( `Entity<...>`呼び出しから取得したターゲットと同じ)が返されるため、エンティティの構成を`EntityTypeConfiguration`ことができるからですタイプ。 しかし、EFコアメソッドが呼ばれる別のタイプを返し`KeyBuilder`のように、あなたはさらにPKを設定することができます`HasName`リレーショナル制約名のために、または特定のデータベースは次のように属性`ForSqlServerHasName`と`ForSqlServerIsClustered`など