首页 文章

如何使用AutoMapper在ASP.Net MVC中编辑实体时映射实体

提问于
浏览
1

我有一个这样的视图模型:

public class CityModel
{
    public int Id { get; set; }

    [Required]
    public int ProvinceId { get; set; }

    [Required]
    public string Caption { get; set; }

    public string Description { get; set; }
}

和一个实体:

public class City : BaseEntity
{
    public int ProvinceId { get; set; }
    public string Caption { get; set; }
    public string Description { get; set; }

    public virtual Province Province { get; set; }
}

和一个BaseEntity:

public abstract class BaseEntity
{
    public int Id { get; set; }

    public DateTime CreatedOn { set; get; }
    public string CreatedBy { set; get; }

    public DateTime ModifiedOn { set; get; }
    public string ModifiedBy { set; get; }
}

我想使用AutoMapper将CityModel类型的一个对象映射到City In Edit对象中的对象,

[HttpPost]
public ActionResult Edit(CityModel model)
{
    if (ModelState.IsValid)
    {
        var entity = _cityRepository.GetCity(model.Id);
        entity = model.ToEntity();
        var operationStatus = _cityRepository.Edit(entity);
        if (operationStatus.IsSuccess) operationStatus = _cityRepository.Save();

        if (operationStatus.IsSuccess)
            RedirectToAction("Index");
    }
    ViewBag.ProvinceId = new SelectList(_provinceRepository.Provinces, "Id", "Caption", model.ProvinceId);
    return View(model);
}

ToEntity是:

public static City ToEntity(this CityModel model)
{
    return Mapper.DynamicMap<CityModel, City>(model);
}

最后从CityModel To City创建 Map 使用此代码:

Mapper.CreateMap<CityModel, City>()
              .ForMember(des => des.Caption, op => op.MapFrom(src => src.Caption.ToPersianContent()))
              .ForMember(des => des.Description, op => op.MapFrom(src => src.Description.ToPersianContent()));

当我想从CityModel映射到City时,从数据库获取City . 城市对象中的继承数据是正确的:

Before Mapping

在映射之后,我想保留原始继承映射,并且自动缓冲器忽略映射此基本属性,但是将null和默认值设置为此属性:

After Mapping

1 回答

  • 2

    我相信你在“ToEntity”中称错了 . 您必须传入现有实体:

    DynamicMap<TSource, TDestination>(TSource source, TDestination destination)
    

相关问题