2012-01-30 46 views
0

暴露我有一個連接表與相關的加入一個附加字段:實體框架代碼優先映射組合鍵在連接表,其中的外鍵被模型

VirtualDatastreamId INT NOT NULL 
DatastreamId   INT NOT NULL 
FormulaElement  INT NOT NULL 

所有列是主鍵。這被映射到

的POCO是:

public class VirtualDatastreamMap 
{ 
    public virtual Datastream Datastream { get; set; } 
    public virtual VirtualDatastream VirtualDatastream { get; set; } 
    public virtual string FormulaElement { get; set; } 
} 

我沒有在模型外鍵的屬性,對我來說,一個外鍵的概念是一個實現細節,應該由封裝由班級指定的關係。如果可能的話,我不想添加這些。

如何將此圖與Fluent API進行映射?我希望這樣的事情下面的(不幸的是不工作):

modelBuilder.Entity<VirtualDatastreamMap>() 
      .HasKey(vdm => 
       new 
       { 
        DatastreamId = vdm.Datastream.Id, 
        VirtualDatastreamId = vdm.VirtualDatastream.Id, 
        FormulaElement = vdm.FormulaElement 
       }); 

匿名類型的字段名必須被命名爲對象不能有兩個名稱相同的字段。

我從this question看到這個問題是在答案中提出的,但似乎沒有什麼更進一步。

如果不可能,哪個更好?

  1. 添加外鍵屬性到模型
  2. 一個Id字段添加到數據庫和模型

由於

回答

1

複合主鍵的每一列都具有被映射到實體中的標量屬性。您的理想解決方案將無法正常工

在選項2中,您還必須創建一個唯一的密鑰並檢查唯一的密鑰違規。 EF沒有內置對唯一密鑰的支持。因此,我會選擇選項1.

+0

滿意。我創建了外鍵屬性。這不是理想的,但它的工作原理。 – Daniel 2012-01-30 02:02:44

相關問題