2012-03-09 125 views
3

在開始時,我想提一提的是,我一直在爭取這個事情幾天,並嘗試了許多與這個問題或多或少有關的答案。但我無法解決它。導航屬性和映射的EF問題

我有兩個類表示數據庫中的表。這些是遺留應用程序使用的現有表,我無法更改它們。

消息可以有多個MessageRecipients。

環境:MVC3,EF4.1

類是:

public class Message 
{ 
    [ForeignKey("MessageReciepients")] 
    public virtual int MessageID { get; set; } 
    public string Title { get; set; } 
    public string Content { get; set; } 
    public DateTime Recieved { get; set; } 
    [ForeignKey("User")] 
    public int AuthorUserID { get; set; } 

    //P\\ Navigation properties 
    public virtual IList<MessageRecipient> MessageReciepients { get; set; } 
    public virtual User User { get; set; } 
} 

public class MessageRecipient 
{ 
    //[Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.None)] 
    public int MessageID { get; set; } 
    public int UserID { get; set; } 
    public bool Read { get; set; } 
    public bool Important { get; set; } 
    public bool Deleted { get; set; } 
    public bool Destroyed { get; set; } 

    //P\\ Navigation Properties 
    public virtual User User { get; set; } 
} 

我的錯誤是:

國外關鍵部件 '郵件ID' 未在聲明的屬性 鍵入'MessageRecipient'。驗證它沒有明確地從模型中排除 ,並且它是一個有效的原始屬性。

如何正確映射這些類,關係來加載消息的收件人?

我可以添加導航屬性用戶正常工作的消息並正確加載用戶的數據。

我對.NET不太熟悉,而且我在學習的同時也學習了這一點。 我嘗試了一些EF API配置來映射這些我試圖發誓,詛咒它,並在接近哭泣和同時祈禱。沒有喜悅!

我真的很感謝幫助。

+0

得到了他們落後 – 2012-03-09 16:28:47

+0

我真的很感激,如果你能給我更多的提示:) – Pawel 2012-03-09 16:29:49

+0

更多的信息在這裏http://stackoverflow.com/que stions/5542864/how-should-i-declare-foreign-key-relationships-using-code-first-entity-framework – 2012-03-09 16:39:50

回答

1

原來的問題是與我需要使用組合鍵,這一切可能與某些屬性來解決:

這是怎麼了它現在看起來:

public class Message 
{ 
    public int MessageID { get; set; } 
    public string Title { get; set; } 
    public string Content { get; set; } 
    public DateTime Recieved { get; set; } 

    [ForeignKey("User")] 
    public int AuthorUserID { get; set; } 

    //P\\ Navigation properties 
    public virtual ICollection<MessageRecipient> MessageRecipients { get; set; } 
    public virtual User User { get; set; } 
} 

public class MessageRecipient 
{ 
    [Key, Column(Order=0), ForeignKey("User")] 
    [DatabaseGenerated(DatabaseGeneratedOption.None)] 
    public int UserID { get; set; } 

    [Key, Column(Order = 1)] 
    [DatabaseGenerated(DatabaseGeneratedOption.None)] 
    public int MessageID { get; set; } 

    public bool Read { get; set; } 
    public bool Important { get; set; } 
    public bool Deleted { get; set; } 
    public bool Destroyed { get; set; } 

    //P\\ Navigation Properties 
    public virtual User User { get; set; } 
} 
1

填寫缺少的屬性:

public class Message 
{ 
    public int MessageID { get; set; } 
} 

public class MessageRecipient 
{ 
    public int MessageID { get; set; } 

    [ForeignKey("MessageID")] 
    public Message Message { get; set; } 
} 
+0

順便說一句,如果當你在MessageRecipient中引入Message對象時需要標準關係'類,EF將自動做出正確的關聯 – 2012-03-09 16:38:56

+0

感謝您的回答,但Mesage類中的第一個屬性已經是MessageID – Pawel 2012-03-09 16:40:27

+0

我已經完成了你所說的,但現在我得到了{「無效的列名'Message_MessageID'。\ r \ nInvalid字段名稱'Message_MessageID'。「} ** {選擇 [Extent1]。[MessageID] AS [MessageID], [Extent1]。[UserID] AS [UserID], [Extent1]。[Read] AS [Read] , [Extent1]。[Important] AS [Important], [Extent1]。[已刪除] AS [已刪除], [Extent1]。[已銷燬] AS [已銷燬], [Extent1]。[Message_MessageID] AS [Message_MessageID] FROM [dbo]。[Message_Recipients] AS [Extent1]} ** – Pawel 2012-03-09 16:59:36