Entity Framework は複合キーをサポートしています。たとえば、複合キーを持つエンティティは次のとおりです。
public class MyEntity
{
public int NodeId { get; set; } // this is a part of entity key
public int ItemId { get; set; } // this is a part of entity key
public string Name { get; set; }
}
...流暢な API を使用した Code First アプローチの構成:
internal sealed class MyEntityConfiguration : EntityTypeConfiguration<MyEntity>
{
public MyEntityConfiguration()
{
// this is a composite key configuration
HasKey(_ => new { _.NodeId, _.ItemId });
Property(_ => _.NodeId);
Property(_ => _.ItemId);
Property(_ => _.Name);
}
}
...およびクエリのサンプル:
context.MyEntities.SingleOrDefault(myEntity => myEntity.NodeId == 1 && myEntity.ItemId == 1);
EF の複合キーであまり良くないこと:
- キーの別の型を宣言することはできません。したがって、キーが 3 つのプロパティで構成されている場合、1 つのキー プロパティではなく 3 つのプロパティがあります。
- 既存のエンティティのキーの変更が許可されている場合は、独自の修正コードを記述して、キーの一貫性を確保する必要があります (1 つのキー プロパティを変更して、別のプロパティを忘れることができます)。
EF と複合キーのパフォーマンスの問題については知りません。これはデータベース エンジンの責任だと思います。