将常规类对象映射到MVC模型

时间:2018-09-25 18:08:09

标签: c# asp.net asp.net-mvc

我们正在将asp.net转换为MVC。我们有一个框架,它返回常规的类对象或数据集。将类对象映射到MVC模型的最佳方法是什么?请让我知道。

例如,

//framework class
public class ISTApplicant
{
   public ISTApplicant GetApplicant()
   { 
       ISTApplicant objApplicant = new ISTApplicant();
       return objApplicant;
   }

   public Dataset GetApplicants()
   {
       return ds;
   }
}

MVC模型

public class ApplicantModel
{
    public string CustomerNo { get; set; }
    public string LastName { get; set; }
    public List<ApplicantModel> LstApplicantModel { get; set; }
}

控制器类

public class ApplicantController : Controller
{
    //how can i assign framework object to my model, something like this.  
    public ActionResult GetApplicant()
    {  
        ApplicantModel model = myframework.Applicant.GetApplicant();
        return mode;
    }

    public ActionResult GetApplicants()
    {
         //if it is dataset what is the best way to handle?
         LstApplicantModel list =  myframework.GetApplicants();
         return list;
    }
}

自从我键入后,您可能会看到一些错误。

2 个答案:

答案 0 :(得分:1)

您的代码中有些东西无法编译。另外,请注意缩进空间,以使您的代码更具可读性。

假设您已在控制器中正确创建了一个动作,并且 ISTApplicant ApplicantModel 具有相同的字段,则可以执行以下操作:

在您的 Startup.cs 文件中:

Mapper.Initialize(cfg => {
    cfg.CreateMap<ISTApplicant, ApplicantModel>();
});

然后,在您的控制器中:

public ActionResult GetApplicant() 
{
    ISTApplicant db = myframework.Applicant.GetApplicant();
    ApplicantModel model = Mapper.Map<ApplicantModel>(db);
    return model;
}

上面的示例正在使用Automapper。请查看如何配置它以及如何正确添加对每个控制器的依赖性。

我没有通过添加您提到的list属性来修改示例,因为您应该创建另一个操作以执行涉及相似逻辑的操作。

希望有帮助!

答案 1 :(得分:1)

这正是AutoMapper解决的问题: https://automapper.org/

如果您将新的MVC模型定义为使用与现有框架模型相同的属性名称和类型,则可以轻松地将它们相互转换,否则为单个属性定义显式映射就足够简单了。

上面链接中的文档非常好,因此无需在此重复,但是值得指出的是,映射配置在“从”和“到”对象类型方面是有方向性的。

例如,如果要从数据库返回对象,然后从MVC应用程序提交更新的版本,则将需要单独的映射,以将类型A转换为B,将类型B转换为A。