To jest coś, co podsłuchiwało mnie od czasu przejścia na EF 6. W jaki sposób teraz mapujemy kolekcje, aby zobaczyć modele takie, że cofanie mapowania nie jest bolesne przy użyciu IEnumerables. Oto fragment kodu poniżej wykazania mój problem:Odwzorowywanie elementów EF na ViewModels z zachowaniem ICollection i leniwym ładowaniem
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; }
model - SS.Model.Event
public virtual ICollection<SS.Model.User> Broadcasters { get; set; }
public virtual ICollection<SS.Model.User> Viewers { get; set; }
Powrót do mapowania Entity Po modyfikacji kolekcji
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
Problem polega na tym, że nie mogę zmapować ICollection do innej ICollection, ponieważ Select tworzy IEnumerable, który odwzorowuje właściwości z powrotem na EF, po czym pojawia się ból, ponieważ muszę odtworzyć kolekcję lub wyliczyć ją, aby ją zaktualizować. Wiem, że brakuje mi czegoś oczywistego, zaktualizowałem ICollection tak, aby było wirtualne, jak to opisano w innych odpowiedziach, ale nie jest dla mnie jasne, jak to pomaga.
Każda pomoc będzie bardzo ceniona!
Gerard
Dlaczego nie 'Nadawcy = e.Broadcasters'? To bardzo niejasne, o co prosisz. Czy istnieje jedna klasa "User" lub dwie? I w jaki sposób jest to związane z leniwym ładowaniem? –
Próbowałem uczynić jaśniejszym poprzez dodanie przestrzeni nazw. Zasadniczo moje pytanie brzmi: jak odwzorować zmiany kolekcji w EF6. Nie widzę żadnego wyraźnego sposobu, aby to zrobić bez ToList(). W związku z tym występuje znaczny spadek wydajności podczas pracy z dużymi kolekcjami. –
"... kolekcje map do przeglądania modeli takich, że cofanie mapowania nie jest bolesne przy użyciu IEnumerables" ..... to nie jest jasne. Co masz na myśli przez "kolekcje map przez". Jak pokazano w Twoim poście, tworzysz nowe typy ze swoich DTO ... Dlaczego to nie działa? – Sam