2012-02-07 32 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