質問: 1)] public string OrderLineNo { get; set; } [Column("qty")] public double Quantity { get; set; } [Column("pr")] public double Price { get; set; } } ``` * 虚構の複合主キーを構成する両方の列に[Key]属性を追加しました。 * 私は[Column]属性のOrderプロパティに値を追加しました。これはコンポジットキーに必要であることを読んでいます。 * 私はテーブルがこのプロジェクトに関連するより約10倍多くの列を持っているので、私は使用する必要がある列だけをマップしました。 それでも、プロジェクトを実行しようとするとエラーが発生します。 > InvalidOperationException:エンティティタイプ 'MyProject.Models.Order'は、主キーを定義する必要があります。 > > このテーブルをEntity Frameworkと連携させるために追加できるものは何ですか? **編集:**コンテキストの`OnModelCreating`メソッドで定義した場合、 `modelBuilder.Entity().HasKey(ord => new { ord.OrderNo, ord.OrderLineNo });` 。しかし、私はまだ可能ならば、属性だけでそれを行うことを好むでしょう。
回答: あなたの設定はEF6でうまくいきます。しかし、Data AnnotationsをEF Coreで使用する場合は注意が必要です(Fluent APIが推奨される方法です)。 ドキュメントのキー(プライマリ)セクションには、明示的に記載されています。 > Fluent APIを使用して、複数のプロパティをエンティティのキー(コンポジットキーとも呼ばれる)に設定することもできます。コンポジットキーはFluent APIを使用してのみ設定できます。コンベンションでコンポジットキーは決して設定されず、データアノテーションを使用してコンポジットキーを設定することはできません。 > > だからあなたは本当に使用する必要があります: ``` modelBuilder.Entity().HasKey(e => new { e.OrderNo, e.OrderLineNo }); ```