我使用Automapper從EF實體映射到查看模型。帶封裝子集合的自動映射投影(EF)
我現在有這個實體
public class MenuGroup : IEntity
{
public int MenuGroupId { get; set; }
protected ICollection<MenuGroupItem> _menuGroupItems { get; set; }
public IEnumerable<MenuGroupItem> MenuGroupItems { get { return _menuGroupItems; } }
public void AddMenuItem(MenuGroupItem menuGroupItem)
{
_menuGroupItems.Add(menuGroupItem);
}
}
這是一個封裝的集合,我也跟着指導這裏,使這項工作:http://lostechies.com/jimmybogard/2014/05/09/missing-ef-feature-workarounds-encapsulated-collections/
所以我配置它,像這樣this.HasMany(x => x.MenuGroupItems).WithRequired(x => x.BelongsTo).WillCascadeOnDelete(true);
現在的問題我得到的是當我嘗試使用automapper將我的MenuGroup
映射到視圖模型。
我運行此代碼:menuGroup = _context.MenuGroups.Project().To<MenuGroupEditModel>().Single(x => x.UniqueUrlFriendlyName == request.UniqueUrlFriendlyName);
,並得到這個錯誤:The specified type member 'MenuGroupItems' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported.
現在我可以與收集工作,它正確地保存到數據庫中,一切都很好那裏只有當我想在這裏使用automapper,它失敗了。
如果我用簡單的代替受保護的ICollection和公共IEnumerable:public ICollection<MenuGroupItem> MenuGroupItems { get; set; }
它可以馬上工作,所以問題在於我的封裝集合自動映射。
更新:我也試過這個menuGroup = _context.MenuGroups.Include(x => x.MenuGroupItems).Where(x => x.UniqueUrlFriendlyName == request.UniqueUrlFriendlyName).Project().ToSingleOrDefault<MenuGroupEditModel>();
比它在ToSingleOrDefault差錯,而不是其他的沒有什麼區別。
嗯,不錯,但如果我那麼做會發生什麼我將ICollection的封裝。我將不得不運行一些測試。被迫需要一套設備並不理想。另外,它爲什麼需要一套方法。我從這個類型項目不是這種類型。 – 2014-11-09 11:23:49
如果你需要一個外部組件來修改它,那麼通常有一個setter – Joanvo 2014-11-09 11:35:40
是的,但我不需要一個外部組件來修改它,因爲我從這個類型投影它不是它。 – 2014-11-09 14:47:26