2012-03-09 1 views
3

私は数日間このことを戦ってきたと言いたいと思っていましたが、この問題に多かれ少なかれ答えの多くを試しました。しかし、私はそれを解決することができませんでした。EFナビゲーションのプロパティとマッピングに関する問題

DBにテーブルを表す2つのクラスがあります。これらはレガシーアプリケーションで使用される既存のテーブルであり、変更することはできません。

メッセージに複数の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' 明示的に がモデルから除外されておらず、有効なプリミティブプロパティであることを確認してください。

メッセージの受信者を読み込むためにこれらのクラス、リレーションシップを正しくマップするにはどうすればよいですか?

ナビゲーションプロパティUserがメッセージに対して正しく機能し、ユーザーのデータを正しく読み込むことを追加できます。

私はあまり.NETに慣れていないので、これをやっている間に学びます。 私は、これらをマップするためにいくつかのEF API設定を試しました。私はそれを誓い、呪いをかけ、同時に泣き叫んで祈っていました。いいえ、喜び!

本当に助けていただければ幸いです。不足しているプロパティで

+0

彼らに後方 –

+0

を得た:)ここ – Pawel

+0

の詳細情報をhttp://stackoverflow.com/queあなたが 'MessageRecipientの内部に' Message'クラスの参照を置くときに、エンティティオブジェクト間の標準的な関係が必要な場合は、stt/5542864/how-should-i-declare-foreign-key-relationships-using-code-first-entity-framework –

答えて

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

btw 'クラス、EFは自動的に適切な関連付けを行います –

+0

答えはありがたいですが、Mesageクラスの最初のプロパティはすでにMessageID – Pawel

+0

です。あなたが言ったことをしましたが、今は{{無効な列名 'Message_MessageID'} \ r \ n無効 [Extent1]。[UserID] AS [UserID]、 [Extent1]。[読み取り] AS [読み取り] AS:[メッセージID] 、[[Extent1]。[重要] AS [重要] [Extent1]。[削除済み] AS [削除済み]、 [エクステント1]。[破棄] AS [破棄]、 [Extent1]。[Message_MessageID] AS [Message_MessageID] FROM [dbo]。[Message_Recipients] AS [Extent1]} ** – Pawel

関連する問題