Давайте возьмем такие классы:C# AutoMapper ProjectTo выбирает все вложенные свойства объекта
public class Child
{
public int Id { get; set; }
public string Name { get; set; }
public string ExtraProp { get; set; }
}
public class Parent
{
public int Id { get; set; }
public string Text { get; set; }
public Child Child { get; set; }
public string ParentExtraProp { get; set; }
}
public class ChildVo
{
public int Id { get; set; }
public string Name { get; set; }
}
public class ParentVo
{
public int Id { get; set; }
public string Text { get; set; }
public ChildVo Child { get; set; }
}
Automapper отображения:
Mapper.CreateMap<Child, ChildVo>();
//.ForSourceMember(x => x.ExtraProp, o => o.Ignore()); //does not help
//.IgnoreAllNonExisting(); //does not help
Mapper.CreateMap<Parent, ParentVo>();
и запросов в Linq для NHibernate:
var test = Session.Query<Parent>()
.Where(x => x.Id == myId)
.ProjectTo<ParentVo>()
.ToList();
ProjectTo выбирает только столбцы (свойства), которые определены в ParentVo (не все свойства класса Parent) - это здорово. Но выбирает все столбцы (свойства) из моего класса Child, несмотря на то, что они не определены в ChildVo. Почему Automapper игнорирует мое вложенное сопоставление свойств? Можно ли использовать все определенные отображения во время проекции?
Спасибо. Любое обходное решение для использования mappigs в таких запросах? – pgram
Не уверен, что вы имеете в виду. 'ProjectTo <>()' будет использовать сопоставления для генерации запросов. – Richard
Я хотел бы заставить linq/nh/automapper использовать вложенные сопоставления в проекциях (запретить select * из child). ProjectTo <>() реализует только родительский объект. – pgram