0

EF Code First の Fluent Configuration を使用してマップしたいエンティティがあります。

class Transaction
{
    int LineItemId { get; set; }
    string TranNumber { get; set; }
    string TaxLotId { get; set; }
    string TradeLeg { get; set; }

    public virtual Transaction NewDealTransaction { get; set; }
    public virtual ICollection<GvaTransactions> RelatedTransactions { get; set; }
}

編集 このデータを保持する単一のテーブルがあります(簡潔にするために、関連しない列は省略されています)。

CREATE TABLE [dbo].[Transactions] (
    [LineItemId]               INT           IDENTITY (1, 1) NOT NULL,
    [TranNumber]               VARCHAR (20)  NOT NULL,
    [TaxLotId]                 VARCHAR (20)  NULL,
    [TradeLeg]                 VARCHAR (20)  NULL,
    CONSTRAINT [PK_GVATransactions] PRIMARY KEY CLUSTERED ([LineItemID] ASC)
)

LineItemId が主キーです。

このRelatedTransactions関係は、同じ TaxLotId を持つすべてのトランザクションが関連しているという事実を表す必要があります。

最後NewDealTransactionに同じ TaxLotId と `TradeLeg == "NewDeal" のトランザクションです。

これらの関係を表す流暢なマッピングを作成するにはどうすればよいですか?

注:ここでの私の好みは、バックエンドを変更しないことです。これは、既に多くのデータを持っている既存のテーブル デザインを継承したためです。

4

1 に答える 1

1

あなたが求めているのは、外部キーの関係 (したがって、Entity Framework の関係/ナビゲーション プロパティ) が設計されているものではありません。
これらは、データをフィルタリングするためではなく、データの整合性を維持するためのものです。

(定義に従って) 関連するレコードをクエリして操作するには、次のような方法でクエリを実行するだけです。
関連するレコード:

var relatedRecords = context.Transactions.Where(t=>t.TaxLotId == "something");  

新規取引:

var newDeals = context.Transactions.Where(t=>t.TaxLotId == "something" && t.TradeLeg == "NewDeal");

これを効率的に行うには、TaxLotId 列と TradeLeg 列に複合インデックスを使用することをお勧めします。

于 2013-09-07T14:27:11.367 に答える