Почему я получаю сообщение об ошибке «Невозможно установить свойство X для типа Y, поскольку для коллекции уже задано EntityCollection»? - PullRequest
3 голосов
/ 11 апреля 2011

Когда я пытался сопоставить коллекцию с другой в EF4, я получил эту ошибку.

Свойство 'ResourceLanguages' для типа 'Resource_EF810770B4FCA2E071F38C2F2EE328AAC216CA2A7BF157503E6658A42D7CF53 уже установлено, так как не может быть установлено для коллекции' be = 0EntityCollection.

Я пытался кодировать вот так

foreach (var resource in resources)
{
    resourceLanguages = resourceLanguageRepositoty.GetAllByResourceId(resource.Id);
    resource.ResourceLanguages = resourceLanguages;
}

Может кто-нибудь помочь мне разобраться?

1 Ответ

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

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

var resources = context.Resources.Include("ResourceLanguages").ToList();

Ваше решение приводит к N + 1 запросам к базе данных, где N - количество ресурсов в коллекции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...