Это то, что прослушивало меня со времени перехода на EF 6. Как мы теперь сопоставляем коллекции, чтобы просматривать модели, такие, что изменение отображения не мучительно с помощью IEnumerables. Вот фрагмент кода ниже демонстрирует мою проблему:Сопоставление объектов EF с ViewModels, поддерживающих ICollection и ленивую загрузку
Entity - SS.Entity.Event
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<SS.Entity.User> Broadcasters { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<SS.Entity.User> Viewers { get; set; }
Модель - SS.Model.Event
public virtual ICollection<SS.Model.User> Broadcasters { get; set; }
public virtual ICollection<SS.Model.User> Viewers { get; set; }
Mapping Назад Организация после изменения коллекции
Broadcasters = e.Broadcasters.Select(u => new SS.Entity.User
{
Id = u.Id,
SkypeId = u.SkypeId,
Name = u.Name
}).ToList(), // THIS IS THE PROBLEM
Viewers = e.Viewers.Select(u => new SS.Entity.User
{
Id = u.Id,
SkypeId = u.SkypeId,
Name = u.Name
}).ToList() // THIS IS THE PROBLEM
Проблема заключается в том, что я не могу сопоставить ICollection с другим ICollection, поскольку Select создает IEnumerable, который после этого возвращает свойства отображения в EF, поскольку мне нужно воссоздать коллекцию или перечислить ее для ее обновления. Я знаю, что мне не хватает чего-то очевидного, я обновил ICollection, чтобы быть виртуальным, как описано в других ответах, но мне непонятно, как это помогает.
Любая помощь была бы принята с благодарностью!
Gerard
Почему не 'Вещательные = e.Broadcasters'? Очень неясно, о чем вы спрашиваете. Есть один класс «Пользователь» или два? И как эта ленивая загрузка связана с этим? –
Я попытался сделать это яснее, добавив пространства имен. По существу, мой вопрос заключается в том, как вы можете отображать изменения коллекции в EF6. Я не вижу ясного способа сделать это без использования ToList(). Поэтому при работе с большими коллекциями наблюдается значительное повышение производительности. –
".... собирать карты для просмотра моделей, таких, что отображение изменений обратно не является болезненным с использованием IEnumerables" ..... это не ясно. Что вы подразумеваете под «картографическими коллекциями через». Как показано на вашем посте, вы создаете новые типы из своих DTO ..... почему это не работает для вас? – Sam