Есть ли фреймворк, который может делать следующее:
var source = new Entity()
{
StringProp = null,
IntProp = 100,
};
var target = new Entity()
{
StringProp = "stringValue", // Property value should remain the same if source value is null
IntProp = 222
};
var mergedEntity = MergeFramework.Merge(source, target); // Here is what I am looking for
Assert.AreEqual(100, mergedEntity.IntField);
Assert.AreEqual("stringValue", mergedEntity.StringField);
Ниже представлен рабочий процесс там, где он мне нужен:
Приложение получает экземпляр сущности. Некоторые свойства экземпляра равны нулю. (исходный экземпляр)
Приложение извлекает из базы данных объект с тем же идентификатором, что и в источнике. (целевой экземпляр)
Объединяет две сущности и сохраняет объединенные в базу данных.
Основная проблема в том, что в моем проекте около 600 сущностей, поэтому я не хочу писать логику слияния для каждой сущности вручную. По сути, я ищу что-то гибкое, например AutoMapper или ValueInjecter, которое удовлетворяет следующим требованиям:
Предоставить возможность указать условия слияния типов. Например: если source.IntProp == int.MinInt -> не объединять свойство
Предоставьте возможность указать конкретные условия собственности. Как в AutoMapper:
Mapper.CreateMap (). ForMember (dest => dest.EventDate, opt => opt.MapFrom (src => src.EventDate.Date));