实体框架:如何使用相同的对象创建双重关系(1-1和many-1)

时间:2016-12-07 11:34:36

标签: database entity-framework mapping relationships fluent-entity-framework

我有两节课:

SELECT dbo.J_TRIM(Supplier) as Supplier
FROM Supplier_List ;

class Sub
{
    public Guid Id { get; set; }
    public DateTime ValidDate { get; set; }
    public Guid MasterId { get; set; }
    public Master Master { get; set; }
}

简单来说,主人有一个主子来定义它,并且可以有0或更多" secondary"潜艇。 我试图以这种方式进行映射

class Master
{
    public Guid Id { get; set; }
    public int Data { get; set; }

    public ICollection<Sub> Subs { get; set; }
    public Sub MainSub { get; set; }
}

但是我有一个例外(&#34; Master不能参与两个关系&#34;)。我不想改变我的模型,因为它符合我的需要,我怎样才能执行这样的映射呢?

1 个答案:

答案 0 :(得分:1)

您无法映射此关系。每个关系都有2个端点,类中的一个复杂属性不能是2个关系的端点。

我会在 bool? IsMainSub 类中创建 Sub 属性,并为 {{1}创建一个唯一的键约束 MasterId 类中的 IsMainSub 。这将确保Sub记录不能包含2个主Master条记录。

更新 - 我知道这看起来并不完美,Sub属性只允许值IsMainSubtrue,因为设置值{{ 1}}将触发唯一约束违规。这是您可以添加到属性设置器以获取任何null值并将其转换为null的逻辑。

我可以回忆一下,您可以创建一个唯一的键约束,允许某些列的false值而不违反约束。我会仔细检查一下。