-1

複合主キーと外部キーをほぼ排他的に使用する大規模な既存のデータベースがあります。このデータベース(SQL Server 2012上)と通信する大規模なC#アプリケーションを作成する必要があります。

ORMの使用を検討していますが、私が知っているほとんどのORMは、複合キー(NHibernateMassivePetaPocoなど)の使用を思いとどまらせる(またはサポートしない)ようです。

このアプリケーションでは、パフォーマンスとスループットが重要です。

どのORM(存在する場合)が複合キーを適切にサポートし、起動に優れたパフォーマンスを発揮しますか?どちらをお勧めしますか?

4

1 に答える 1

1

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 と複合キーのパフォーマンスの問題については知りません。これはデータベース エンジンの責任だと思います。

于 2013-01-09T08:24:25.347 に答える