我们正在将asp.net转换为MVC。我们有一个框架,它返回常规的类对象或数据集。将类对象映射到MVC模型的最佳方法是什么?请让我知道。
例如,
//framework class
public class ISTApplicant
{
public ISTApplicant GetApplicant()
{
ISTApplicant objApplicant = new ISTApplicant();
return objApplicant;
}
public Dataset GetApplicants()
{
return ds;
}
}
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;
}
}
自从我键入后,您可能会看到一些错误。
答案 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。