用于建模的C#Viewmodel

时间:2019-05-20 08:03:01

标签: c# .net .net-core

我想检查我是否做对了。

所以我试图在.net核心中创建一个API。

这就是控制器:

[HttpPost]
public IActionResult CreateAdministrator([FromBody]AdministratorViewModel administrator){

    _unitOfWork.Administrators.Add(new Administrator
    {
       FirstName = administrator.FirstName,
       LastName = administrator.LastName,
       EmailAddress = administrator.EmailAddress,
       Password = administrator.Password,
       ManageAdministrators = administrator.ManageAdministrators
       });
       _unitOfWork.Complete();
    }

因此,我将AdministratorViewModel作为包含用户所做输入的对象。 然后,我将信息传递给Administrator对象以创建新的管理员。

有没有一种更好的方法,那就一直写 property = administrator.property。因此,例如,如果我添加一个额外的字段DateOfBirth,则必须在3个不同的位置(视图模型,模型和控制器)中添加它。

是否可以只填充或“合并”两个对象的属性,以便自动填充所有填充的属性?

还是应该以其他方式执行此操作?

4 个答案:

答案 0 :(得分:3)

您可以为此https://docs.automapper.org/en/stable/使用自动映射器

您可以创建另一种方法的另一种方法,例如

Administrator  ModelFromView (AdministratorViewModel viewModel) 
{
//mapping code
}

但是,每次以这种方式向类中添加新属性时,都必须向该方法添加新的映射属性。 Automapper可以避免这种情况。但是有时您需要对映射过程进行更多控制,第二种方法可能会帮助您。

答案 1 :(得分:1)

您可以为您的类AdministratorViewModel创建一个副本构造函数,并在那里处理所有业务逻辑。

之后,您可以使用:

_unitOfWork.Administrators.Add(new Administrator(administrator));

通过这种方法,您以后决定添加更多属性时,不必在所有位置添加属性。

答案 2 :(得分:0)

并非始终是使用AutoMapper的最佳方法。有趣的是here

答案 3 :(得分:0)

您需要的是Automapper

我在生产环境中使用了它