2014-02-18 33 views
0

我仍然從實體框架Code First開始。我希望能夠在創建新資源時從列表中選擇資源。如何使用資源模型引用資源?實體框架代碼優先 - 參考相同的表

public class Resource 
{ 

    public int ResourceId { get; set; } 
    [Required] 
    [DataType(DataType.EmailAddress)] 
    [EmailAddress] 
    public string EmailAddress { get; set; } 
    [Required] 
    public string Password { get; set; } 
    public string FullName { get; set; } 


    public int TimeManagerId { get; set; } 

    public int TravelManagerId { get; set; } 

    public int OvertimeManagerId { get; set; } 

    public int AbsenceManagerId { get; set; } 
    public virtual Resource TimeManager { get; set; } 
    public virtual Resource TravelManager { get; set; } 
    public virtual Resource OvertimeManager { get; set; } 
    public virtual Resource AbsenceManager { get; set; } 

} 
+0

這看起來不錯。這有什麼問題?你有錯誤嗎?你的問題到底是什麼? –

+0

當我生成控制器,不應該字段是下拉列表?我目前只是顯示int textfields – razeth01

+0

我不明白這是什麼邏輯模型。但你有什麼嘗試嗎? –

回答

2

我覺得你差得很近!如果你想按照慣例做到這一點,你可以將模型中的外鍵改爲[導航屬性名稱] [主要主鍵屬性名稱]的形式。具體來說,改變IdResourceId所以你引用(這恰好是自身)的表主匹配...

public int TimeManagerResourceId { get; set; } 
public int TravelManagerResourceId { get; set; } 
public int OvertimeManagerResourceId { get; set; } 
public int AbsenceManagerResourceId { get; set; } 

因爲你只是用EF代碼第一次開始,我會建議您安裝實體框架電動工具。您可以右鍵單擊包含您的DbContext的.cs文件,它將生成映射的只讀圖。

用您當前的模型嘗試一下......右鍵單擊圖中的實體並查看錶映射。你會看到EF無法弄清楚你的外鍵,併爲你創建了4個外鍵。一旦你做出上面的改變,再次生成圖表,看看不同之處。

編輯:代碼第一次約定的文檔... http://msdn.microsoft.com/en-us/data/jj679962.aspx

+0

這很好。非常感謝。你的救星。 – razeth01

+0

太棒了!如果您有興趣,只需更新該文章,並參考代碼優先約定。此外,這些通常被稱爲「自引用」或「分層」實體......如果您需要搜索更多信息,這很方便。 –