Как игнорировать всех участников назначения, кроме отображенных?
Как это сделать? У нас есть SummaryDto, который 9X_c#-language сопоставляет три разных типа, и когда мы 9X_c# создаем карту для каждого типа, свойства, которые 9X_c#.net не сопоставлены, выдают ошибку. В сводке 9X_automapper dto около 35 атрибутов. Использовать опцию 9X_.cs-file Ignore() для каждого из них - слишком большая 9X_automapper проблема. Есть ли глобальный игнор? Что-то 9X_c#.net вроде
Это кажется хорошим делом, однако, несмотря на то, что в вашем DTO 35 свойств, если вы используете `AutoMapper.Mapper.A ...
5
Общее количество ответов: 5
Ответ #1
Ответ на вопрос: Как игнорировать всех участников назначения, кроме отображенных?
Это работает для меня:
public static class MappingExpressionExtensions
{
public static IMappingExpression IgnoreAllUnmapped(this IMappingExpression expression)
{
expression.ForAllMembers(opt => opt.Ignore());
return expression;
}
}
Поскольку ForAllMembers возвращает 9X_automappervoid, вызов ForAllMembers(o => o.Ignore()) без этого метода расширения работать 9X_csharp не будет. Мы хотим, чтобы выражение сопоставления 9X_automapper оставалось доступным для включения последующих 9X_c#-language сопоставлений:
CreateMap()
.IgnoreAllUnmapped()
.ForMember(d => d.Text, o => o.MapFrom(s => s.Name))
.ForMember(d => d.Value, o => o.MapFrom(s => s.Id));
Ответ на вопрос: Как игнорировать всех участников назначения, кроме отображенных?
Я тоже долго боролся с этим, по крайней 9X_c# мере, с проблемой, похожей на эту. У меня 9X_c-sharp был класс с множеством свойств (около 30), и 9X_csharp я хотел отобразить только 4 из них. Кажется 9X_visual-c# безумием добавлять 26 операторов игнорирования 9X_.cs-file (особенно когда это означает, что будущие 9X_c-sharp изменения в классе будут означать их обновление!)
Я 9X_.cs-file наконец обнаружил, что могу сказать AutoMapper 9X_c#-language игнорировать все, а затем явно добавить 9X_.cs-file те, которые мне нужны.
// Create a map, store a reference to it in a local variable
var map = CreateMap();
// Ignore all members
map.ForAllMembers(opt => opt.Ignore());
// Add mapping for P1
map.ForMember(dest => dest.P1, opt => opt.MapFrom( src => src.P1));
// Add other mappings...
map.ForMember(dest => dest.P2, opt => opt.MapFrom( src => src.P2));
map.ForMember(dest => dest.P3, opt => opt.MapFrom( src => src.P3));
map.ForMember(dest => dest.P4, opt => opt.MapFrom( src => src.P4));
Вас простят за то, что 9X_c# вы думаете, что можете просто сделать это 9X_c-sharp (но не делайте этого, потому что это не 9X_c#-language будет компилироваться):
Причина, по которой 9X_csharp это не работает, заключается в том, что 9X_csharp метод ForAllMembers() не поддерживает плавный 9X_visual-c# стиль цепочки (по крайней мере, в текущей 9X_visual-c# версии 2.0).
Хорошая новость в том, что версия 9X_c#-language без цепочки действительно работает. Единственное 9X_c# предостережение, конечно, заключается в 9X_automapper том, что вам нужно явно указать AutoMapper, какие 9X_c-sharp элементы отображать. Я еще не нашел простого 9X_.cs-file способа сделать это в обоих направлениях, чтобы 9X_.cs-file вы по-прежнему могли использовать подразумеваемые 9X_c#.net сопоставления и игнорировать неработающие.
вы также можете использовать ForAllOtherMembers ...
Ответ #3
Ответ на вопрос: Как игнорировать всех участников назначения, кроме отображенных?
Чтобы избежать явного указания сопоставленных 9X_csharp свойств, можно использовать IgnoreAllNonExisting. Он игнорирует 9X_csharp любые свойства назначения, для которых нет 9X_c#-language сопоставленных свойств источника.