2013-01-12 83 views
1

考慮以下模型:EF5代碼首先導航屬性多酒店的地圖,枚舉值

public class Item 
{ 
    public int Id { get; set; } 
    public ICollection<File> Attachments { get; set; } 
} 

public class File 
{ 
    public int Id { get; set; } 
    public ObjectType ObjectType { get; set; } // enum stored as INT 
    public int ObjectId { get; set; } 
} 

會如何使用流利的API,因此產生的SQL正確加入我描述了Item.Attachments導航屬性,如:

SELECT ... FROM Items a 
LEFT JOIN Files b 
    ON a.Id = b.ObjectId AND b.ObjectType = 8 (example enum value) 

我試圖揭露Item.ObjectTypeItem.ObjectId屬性,然後在做我的項目地圖如下:

HasMany(x => x.Attachments) 
    .WithOptional() 
    .Map(x => x.MapKey("ObjectType", "ObjectId")) 
    .WillCascadeOnDelete(false); 

但是這會導致以下運行時錯誤,大概是因爲這不是數據庫中的實際外鍵。

指定的關聯外鍵列'ObjectType,ObjectId' 無效。在代碼第一映射不支持指定必須 主鍵列

回答

0

此數相匹配的列數,因爲ItemFile之間的關係是無效引用約束。 EF代碼首先僅支持等價於外鍵約束的映射=>依賴表的外鍵中的列必須與主表中的主列中的列匹配。你的情況期望依賴表中的附加常量列。

+0

這就是我所害怕的,但找不到任何具體的證據表明它不被支持。希望這將在未來得到支持,因爲對我來說這是一種比較常見的情況(其中一種類型可以與許多其他類型相關),並且對每種類型使用枚舉比使用單獨的連接表更好。 – Jared