Я использую 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
в viewmodel.
я запускаю этот код: 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; }
, он работает сразу, поэтому проблема заключается в автоматическом использовании с моей инкапсулированной коллекцией.
Update: Я также попытался это menuGroup = _context.MenuGroups.Include(x => x.MenuGroupItems).Where(x => x.UniqueUrlFriendlyName == request.UniqueUrlFriendlyName).Project().ToSingleOrDefault<MenuGroupEditModel>();
никакой разницы, кроме что ошибочный в ToSingleOrDefault вместо этого.
Хмм хорошо, но если я сделаю то, что происходит с моим инкапсулирования ICollection. Мне нужно будет провести несколько тестов. Это не идеальный вариант для того, чтобы требовать набора. Кроме того, зачем нужен установленный метод. Я проецирую этот тип не на этот тип. –
Если вам нужен внешний компонент для его изменения, то это нормально, если у вас есть сеттер – Joanvo
Да, но мне не нужен внешний компонент для его изменения, так как я проецирую _from_ этого типа на него. –