如何在EF代码中指定复合关系 - 首先不映射到PK

时间:2012-02-07 15:24:01

标签: c# entity-framework entity-framework-4.1 ef-code-first

asked this ages ago,但严重地说了这个问题。

我正在尝试指定两个类之间的关系,这不是一个简单的FK映射 - 这是一个预先存在的数据库,而不是我将从EF生成的。

所以,2个对象的简化视图:

public class WidgetDetails
{

    [Key]
    public int WidgetId { get; set; }

    public int WidgetNumber {get; set;}

    // Some other props here..

    [ForeignKey("WidgetId,WidgetNumber")]
    public virtual WidgetProps WidgetProps { get; set; }


}

public class WidgetProps
{
    [Key]
    public int WidgetPropId { get; set; }

    [Key, Column(Order = 0)]
    public int WidgetId { get; set; }

    [Key, Column(Order = 1)]
    public int WidgetNumber { get; set; }

    // Some props here...
}

这里的关键是WidgetProps已经有了它自己的PK。但是 - 因为我希望能够使用复合WidgetId和WidgetNumber指定WidgetProps与WidgetDetails相关,我尝试在我的ForeignKey属性中指定它。

然而,这只有在我从WidgetProps.WidgetPropId中删除[KEY]属性时才会起作用 - 因为在EF中,关系是使用键映射的。

我想对EF说“ 嘿,这是PK专栏,但这种关系没有使用它,它基于这两列 ”。

这可能吗?

希望有意义!

1 个答案:

答案 0 :(得分:2)

这是不可能的。 EF只能创建遵循数据库规则的关系。从属方面的FK必须包含主要方面的PK的所有部分。

一般规则:EF fluent API无法使用PK,FK关系定义您无法在数据库中定义的任何关系。