Сначала код EF 4.1: проблема отображения один ко многим - PullRequest
4 голосов
/ 13 апреля 2011

В моем домене у меня есть эти классы (в упрощенном виде)

    public class Document
    {    
        public string Id { get; set; }
        public IList<MetadataValue> MetadataList { get; set; }
    }

    public class MetadataValue
    {
        public string DocumentId { get; set; }
        public string Metadata { get; set; }
        public string Value { get; set; }
    }

В документе может быть много метаданных.При отображении объекта Document у меня есть:

    HasMany<MetadataValue>(x => x.MetadataList)
        .WithRequired()
        .HasForeignKey(x => x.DocumentId);

Когда я сохраняю объект Document, его список метаданных также сохраняется.Но когда я получаю объект Document, его список метаданных всегда пуст.Что не так с этим отображением?

Ответы [ 3 ]

5 голосов
/ 13 апреля 2011

Вместо использования свойства навигации virtual для включения отложенной загрузки - как предлагает Paige Cook - вы также можете загрузить коллекцию:

var query = dbContext.Documents
    .Where(d => d.Id == "MyDoc")
    .Include(d => d.MetadataList);

Если вы не используете отложенную загрузку, вы всегда должны четко указать в своих запросах, какое свойство навигации - ссылки и коллекции - вы хотите загрузить вместе со своей сущностью.

3 голосов
/ 13 апреля 2011

Вам необходимо объявить ваше свойство MetadataList в вашем классе Document как виртуальную коллекцию ICollection, чтобы EF мог правильно отобразить ее:

1 голос
/ 28 июля 2011

Самый простой способ - использовать MetadataValueID в качестве ключа (вместо использования DocumentID).

...