2012-02-07 100 views
0

I asked this ages ago但是这个问题措辞严重。如何在EF代码中指定复合关系 - 首先不映射到PK

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

因此,两个对象的简化视图:

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列,但这种关系是不使用它,它是基于这2列”。

这可能吗?

希望有道理!

回答

2

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

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

+0

看起来像我能做到这一点的唯一方法就是添加代表关系的属性并从db中获取相关数据。感谢您的澄清! – 2012-02-08 08:21:50