拉到最下面,有最新的思考。

最近task都做完了,TL开始让我熟悉后端代码了,看到别人create接口有个autoMap很好奇。今天写个博客记录一下用法。

先上参数,3个 接受数据的类型,映射数据的类型,数据源

docke 将当前用户映射到容器中 用户映射 用户dbo_c#

将相似的对象映射到另一个对象是很常见的。这也是乏味和重复的,因为一般两个对象(类)可能具有相似的/相同的属性映射到彼此。想象在一个典型的应用服务的方法:

public class UserAppService : ApplicationService
{
    private readonly IRepository<User> _userRepository;

    public UserAppService(IRepository<User> userRepository)
    {
        _userRepository = userRepository;
    }

    public void CreateUser(CreateUserInput input)
    {
        var user = new User
        {
            Name = input.Name,
            Surname = input.Surname,
            EmailAddress = input.EmailAddress,
            Password = input.Password
        };

        _userRepository.Insert(user);
    }
}

createuserinput是一个简单的DTO和用户这是一个简单的实体。我们从给定输入手动创建了一个用户实体。用户实体在实际应用程序中具有更多的属性,手工创建它将变得单调乏味,容易出错。同时,我们应该改变映射的代码时,我们要对用户和createuserinput添加新的属性。

我们可以使用一个库来自动绘制这个映射。AutoMapper是一个对象到对象的映射最好的库。ASP.NET的模板定义iobjectmapper接口抽象和实现这个接口使用AutoMapper Abp.AutoMapper包。

public class UserAppService : ApplicationService
{
    private readonly IRepository<User> _userRepository;
    private readonly IObjectMapper _objectMapper;

    public UserAppService(IRepository<User> userRepository, IObjectMapper objectMapper)
    {
        _userRepository = userRepository;
        _objectMapper = objectMapper;
    }

    public void CreateUser(CreateUserInput input)
    {
        var user = _objectMapper.Map<User>(input);
        _userRepository.Insert(user);
    }
}

map是获取源对象并创建一个新的目标对象的简单方法,该对象声明为泛型参数(本示例中的用户)。映射方法具有将对象映射到现有对象的重载。假设我们已经有一个用户实体,并且想通过对象更新它的属性:

public void UpdateUser(UpdateUserInput input)
{
    var user = _userRepository.Get(input.Id);
    _objectMapper.Map(input, user);
}

ABP框架系列之四十二:(Object-To-Object-Mapping-对象映射) - 斗哥哥 - 博客园

2022/4/27 

今天对于映射的再次思考🤔

起因是这样的,如果两个对象都是一样的属性一样的值,如果不使用映射呢?直接把原对象传进去不久可以了嘛?

想了半天。。。回去把代码翻来覆去看了看。。。终于搞明白了。

举个例子, 函数A只接受FirstTypeDTO类型的数据

function A(FisrtTypeDTO){
  ...
}

这时候接口传回来的值,不是此类型,但是属性和FirstTypeDTO一模一样。

class FirstTypeDTO{
    Prop1{
        get;set;
    }
}

class SecondTypeDTO{
    Prop{
        get;set;
    }    
}

主函数体内,某函数只接受FirstTypeDTO类型,那么就需实现对象映射,从SecondTypeDTO到FirstTypeDTO,这样就不会出错。

2022/4/29 新的思考

明天就是五一了,今天把源码看一下。最常用的。

docke 将当前用户映射到容器中 用户映射 用户dbo_学习_02

 看了看项目里的代码,发现形式参数的TSource可以省略。。。不看一下源码我还真是有点懵逼。。。