В EF 4.1 код первого: один-ко-многим проблема сопоставления
В моем домене у меня есть эти классы (в упрощенной форме)
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; }
}
Документ может иметь много метаданных. В отображении сущности документа у меня есть:
HasMany<MetadataValue>(x => x.MetadataList)
.WithRequired()
.HasForeignKey(x => x.DocumentId);
Когда я сохраняю объект документа, его список метаданных также сохраняется. Но когда я получаю объект Document, его список метаданных всегда равен нулю. Что не так с этим отображением?
3 ответа:
Вместо того, чтобы использовать свойство навигации
virtual
, чтобы включить ленивую загрузку, как это предлагает Пейдж Кук, вы также можете быстро загрузить коллекцию:var query = dbContext.Documents .Where(d => d.Id == "MyDoc") .Include(d => d.MetadataList);
Если вы не используете lazy loading, вы всегда должны четко определить в своих запросах, какое свойство навигации-ссылки и коллекции - вы хотите загрузить вместе с вашей сущностью.