Има ли някаква рамка, която може да направи следното:
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));