public abstract class Entity : IEntity
{
[Key]
public virtual int Id { get; set; }
}
public class City:Entity
{
public string Code { get; set; }
}
public class BaseViewModel:IBaseViewModel
{
public int Id { get; set; }
}
public class CityModel:BaseViewModel
{
public string Code { get; set; }
}
my domain and view classes...
and
for mapping extension
public static TModel ToModel<TModel,TEntity>(this TEntity entity)
where TModel:IBaseViewModel where TEntity:IEntity
{
return Mapper.Map<TEntity, TModel>(entity);
}
and i am using like below
City city = GetCity(Id);
CityModel model = f.ToModel<CityModel, City>();
but its long
can i write it like below?
City city = GetCity(Id);
CityModel model = f.ToModel();
is that possible?
Instead of jumping through all of those hoops, why not just use:
public static TDestination ToModel<TDestination>(this object source)
{
return Mapper.Map<TDestination>(source);
}
No because the 1st generic argument can't be implicitly inferred.
I would do this
public static TModel ToModel<TModel>(this IEntity entity) where TModel:IBaseViewModel
{
return (TModel)Mapper.Map(entity, entity.GetType(), typeof(TModel));
}
Then the code is still shorted than it was:
var city = GetCity(Id);
var model = city.ToModel<CityModel>();
Put the extension method on IEntity
as a member method. Then you have to pass only one type.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.