0

我有一个实体,我想使用 EF Code First 的 Fluent 配置进行映射:

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

您所要求的不是外键关系(以及实体框架关系/导航属性)的设计目的。
它们旨在保持数据完整性,而不是用于过滤数据。

要查询和使用相关的记录(根据您的定义),您只需以这样的方式查询:
相关记录:

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 回答