1つのプロパティを2つの別個のエンティティ(外部キーの一部として、外部キーとしての外部キー)として外部キーとして使用したいと考えています。ここで私が何を意味するかの簡単な例です:CodeFirst 2つのプロパティへの外部キー
public class ParentEntity{
[Key, Column(Order = 1)]
String Id {get; set;}
[Key, Column(Order = 2), ForeignKey("Year")]
int YearId {get; set;}
[ForeignKey("YearId")]
Year Year;
virtual ICollection<ChildEntity> Children {get; set;}
}
public class ChildEntity{
[Key, Column(Order = 0), ForeignKey("Parent")]
String Id {get; set;}
[Key, Column(Order = 1), ForeignKey("Parent")]
String ParentId {get; set;}
[Key, Column(Order = 2), ForeignKey("Parent, Year")]
int YearId {get; set;}
[ForeignKey("ParentId, YearId")]
ParentEntity Parent{get; set;}
[ForeignKey("YearId")]
Year Year {get; set;}
}
public class Year{
[Key]
int YearId {get; set;}
}
ChildEntity
でYearId /年のプロパティParentEntity
に、主キー(ParentIdは/年)の一部、およびYear
テーブルへの外部キーの両方として機能しなければなりません。
ただし、タグForeignKey("Parent, Year")
は、ナビゲーションプロパティに対して1つのパラメータしか取ることができないため、無効です。それは「親」と「年」という名前の親、年」の代わりに、2つのナビゲーションプロパティという名前のナビゲーションプロパティ、探している、私は理にかなっていると仮定し
Additional information: The ForeignKeyAttribute on property 'YearId' on type 'CodeFirst.Models.ChildEntity' is not valid.
The navigation property 'Parent, Year' was not found on the dependent type 'CodeFirst.Models.ChildEntity'.
The Name value should be a valid navigation property name.
:これは私が取得エラーメッセージです。
EntityFramework/CodeFirstにこのパターンを正しく認識させるにはどうすればよいですか?
NB:エンティティの「親」/「子」という名前を付けましたが、それらの間に継承関係はありません(実際は所有関係です)。
だけで複合キーを使用しないでください。これは、あなたのコードを目的なしに不必要に複雑にする反パターンです。主キーの全体のポイントは、それがユニークであることです。他のものと組み合わせる必要はありません。 –