You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I know that expressMapper can manage conditional mapping executed when calling map, but I think that current implementation doesn't manage a true conditional copy in a simple way.
My goal is very simple: i want to manage a merge between two objects of the same type, simply copy the source fields in destination fields only is it's equal to null (or default field value). I try to use different methods, but nothing work as i want:
the Function operation cannot test source and destination field to compare
the Before operation cannot conditonnally change comportement of mapping (just make initialisation process)
the registerCustom need to define one custom mapping class for each type combinaison; I can't define a generic CustomMapper class which doesn't inherit from a statically generic class ICustomMapper<T1,T2>. Furthermore, you have to define one CustomMapper class for all connected types If you have a connected graph of type, and you have to explicit call mapping for each connected object, like in this example:
for a Address which have a Town as a field object, you have to define 2 Mappers classes like this one
public class MergeMapperAdress : ExpressMapper.ICustomTypeMapper<Adress, Adress>
{
public Adress Map(IMappingContext<Adress, Adress> context)
{
if (context.Destination == default(Adress))
context.Destination = new Adress();
// copy all primitive fields to destination only if it's null
context.Source.Merge(context.Destination);
if (context.Destination.town== null)
context.Destination.town= ExpressMapper.Mapper.Map(context.Source.town, typeof(Town), typeof(Town)) as Town;
else
ExpressMapper.Mapper.Map(context.Source.town, context.Destination.ville, typeof(Town), typeof(Town));
return context.Destination;
}
}
public class MergeMapperTown : ExpressMapper.ICustomTypeMapper<Town, Town>
{
public Ville Map(IMappingContext<Town, Town> context)
{
if (context.Destination == default(Town))
context.Destination = new Town();
// copy all primitive fields to destination only if it's null
context.Source.Merge(context.Destination);
return context.Destination;
}
}
The text was updated successfully, but these errors were encountered:
I know that expressMapper can manage conditional mapping executed when calling map, but I think that current implementation doesn't manage a true conditional copy in a simple way.
My goal is very simple: i want to manage a merge between two objects of the same type, simply copy the source fields in destination fields only is it's equal to null (or default field value). I try to use different methods, but nothing work as i want:
the Function operation cannot test source and destination field to compare
the Before operation cannot conditonnally change comportement of mapping (just make initialisation process)
the registerCustom need to define one custom mapping class for each type combinaison; I can't define a generic CustomMapper class which doesn't inherit from a statically generic class ICustomMapper<T1,T2>. Furthermore, you have to define one CustomMapper class for all connected types If you have a connected graph of type, and you have to explicit call mapping for each connected object, like in this example:
for a Address which have a Town as a field object, you have to define 2 Mappers classes like this one
The text was updated successfully, but these errors were encountered: