Automapper и нулевые словари - PullRequest
1 голос
/ 10 января 2020

Я использую Automapper , чтобы наложить объект на себя.

Я хочу игнорировать null значения из исходного объекта при выполнении сопоставления. Это работает для коллекций с использованием AllowNullCollections = true;. Когда у меня есть целевой объект, который содержит словарь с некоторыми элементами, и я пытаюсь отобразить исходный объект, который содержит нулевой словарь, я ожидаю, что нулевой словарь будет игнорироваться, потому что я игнорирую нулевые коллекции.

Но на моем целевом объекте Словарь оказывается пустым. Это ожидаемое поведение для словарей?

Это мой профиль

AllowNullCollections = true;

CreateMap<T, T>()
.ForAllOtherMembers(o => o.Condition((s, d, value) => value != null));

И мой картографический вызов

var context = PatcherProfileContext.Create();

var originalEntity = new TestEntity
{
    Dictionary = new Dictionary<string, object> { { "key", "value" } }
};

var patchEntity = new TestEntity
{
    Dictionary = null
};

context.Mapper.Map(patchEntity, originalEntity);

originalEntity.Dictionary.ShouldHaveSingleItem();

Но он заканчивается быть пустым.

1 Ответ

0 голосов
/ 13 января 2020

С помощью Lucian я понял, что поведение по умолчанию при сопоставлении с существующей коллекцией - очистка этой коллекции вне зависимости от того, если AllowNullCollections = true. Я нашел старую публикацию stackoverflow, детализирующую, что я должен использовать предварительное условие вместо обычного условия в этом случае. Я думаю, что это будет работать для меня: Automapper не отображает должным образом нулевой элемент списка, когда задано условие! = Null

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...