這是自從轉移到EF 6以來,一直困擾着我的東西。我們現在如何映射集合以查看模型,以便使用IEnumerables映射更改不會很痛苦。這是下面展示我的問題的代碼片段:將EF實體映射到維護ICollection和延遲加載的ViewModels
實體 - 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; }
映射回收藏品修改後的實體
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的虛擬其他答案中概述的內容,但是我不清楚這有什麼用處。
任何幫助將不勝感激!
傑拉德
爲什麼不'廣播= e.Broadcasters'?這是很不清楚你問的。是否有一個「用戶」類,或兩個?那麼如何延遲加載與此有關? –
我試圖通過添加命名空間來使其更加清晰。基本上我的問題是如何映射回EF6中的集合更改。沒有ToList(),我發現沒有明確的方法可以做到這一點。因此,在處理大型集合時會有明顯的性能下降。 –
「....通過映射集合來查看模型,以便使用IEnumerables映射變回不會很痛苦」......這並不明確。 「通過地圖集合」意味着什麼?正如你的帖子所說,你正在從你的DTO創建新的類型.....爲什麼這不適合你? – Sam