EF Проблемы со свойствами навигации и отображением - PullRequest
3 голосов
/ 09 марта 2012

Вначале я хотел упомянуть, что боролся с этим несколько дней и пробовал многие ответы, более или менее связанные с этой проблемой.И все же я не смог ее решить.

У меня есть два класса, которые представляют таблицы в БД.Это существующие таблицы, используемые унаследованным приложением, и я не могу их изменить.

Сообщение может иметь несколько 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; }
}

У меня ошибка:

Компонент внешнего ключа 'MessageID' не является объявленным свойством типа 'MessageRecipient'.Убедитесь, что он не был явно исключен из модели и является допустимым примитивным свойством.

Как правильно отобразить эти классы, отношения для загрузки получателей сообщения?

Могу добавить, что свойство навигации Пользователь правильно работает для Сообщения и правильно загружает данные Пользователя.

Я не слишком разбираюсь в .NET и учусь при этом.Я попробовал некоторые настройки EF API, чтобы отобразить их, я пытался ругаться, ругаться и быть близким к тому, чтобы плакать и молиться одновременно.Нет радости !!

Буду очень признателен за помощь.

Ответы [ 2 ]

1 голос
/ 14 марта 2012

Оказалось, что проблема была с составным ключом, который мне нужно было использовать, и все это можно было решить с некоторыми атрибутами:

Вот как это выглядит сейчас:

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 голос
/ 09 марта 2012

заполните недостающие свойства:

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

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

    [ForeignKey("MessageID")]
    public Message Message { get; set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...