簡體   English   中英

如何在EF代碼中指定復合關系 - 首先不映射到PK

[英]How to specify composite relationships in EF code-first that don't map to PKs

在很久以前問過這個問題,但是這個問題措辭嚴厲。

我試圖指定兩個類之間的關系,這不是一個簡單的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專欄,但這種關系沒有使用它,它基於這兩列 ”。

這可能嗎?

希望有道理!

這不可能。 EF只能創建遵循數據庫規則的關系。 從屬方面的FK必須包含主要方面的PK的所有部分。

一般規則:EF fluent API無法使用PK,FK關系定義您無法在數據庫中定義的任何關系。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM