Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 自动映射:DTO和实体之间的映射_C#_Asp.net Core_Asp.net Web Api_.net Core_Automapper - Fatal编程技术网

C# 自动映射:DTO和实体之间的映射

C# 自动映射:DTO和实体之间的映射,c#,asp.net-core,asp.net-web-api,.net-core,automapper,C#,Asp.net Core,Asp.net Web Api,.net Core,Automapper,我正在使用ASP.NET核心WebAPI,我想为名为“Item”的对象执行CRUD。 我使用EF Core来处理SQL数据库,我有两个模型来表示我的对象 ItemDto-项目的数据传输对象 ItemEntity-数据库对象(表示表1:1中的一行) 我的httpget-one和httpget-many方法的工作方式是 获取ItemRepository实例 获取一个或多个ItemEntity 使用AutoMapper将其映射到ItemDto 这是在我的构造函数中初始化的,比如 m_itemDto

我正在使用ASP.NET核心WebAPI,我想为名为“Item”的对象执行CRUD。 我使用EF Core来处理SQL数据库,我有两个模型来表示我的对象

  • ItemDto-项目的数据传输对象
  • ItemEntity-数据库对象(表示表1:1中的一行)
  • 我的httpget-one和httpget-many方法的工作方式是

  • 获取ItemRepository实例

  • 获取一个或多个ItemEntity

  • 使用AutoMapper将其映射到ItemDto 这是在我的构造函数中初始化的,比如

    m_itemDtoMapper = new Mapper(new MapperConfiguration(cfg => cfg.CreateMap<ItemEntity, ItemDto>()));
    
    m_itemDtoMapper=new映射器(new-MapperConfiguration(cfg=>cfg.CreateMap());
    
  • 在我的WebAPI方法中,我使用以下行将其映射到ItemDto(对于GET-many情况):

    var itemDtos=m_itemDtoMapper.Map(items);
    
    这工作得很好,AutoMapper非常强大。我现在的问题是:

  • 这是管理数据库实体和数据传输对象之间关系的标准方法吗
  • 在CreateItem方法中,我需要进行反向映射。我需要将ItemDto映射到ItemEntity,而不是将ItemEntity映射到ItemDto。我该怎么做?仅使用切换实体创建映射器的副本是可行的,但这就是应该如何实现的吗?i、 我有两个制图员

  • 在您的示例中,似乎每次初始化一个新的映射器实例时都会进行初始化。我建议您使用依赖项注入,并使用AutoMapper映射配置文件

    你可以通过三个简单的步骤来完成,我认为它回答了你的两个问题:

    第1步: 只需创建一个名为MappingProfile或类似的新类:

    公共类映射配置文件:配置文件
    {
    公共映射配置文件()
    {
    CreateMap();//单向
    CreateMap().ReverseMap();//反向
    }
    }
    
    步骤2:在Startup.cs中注册自动映射器

    //注册自动映射器
    AddAutoMapper(Assembly.getExecutionGassembly());
    
    第3步:在DI上使用映射器

    公共用户服务(IMapper映射器){
    _映射器=映射器;
    }
    //就这么说吧
    _mapper.Map(用户);
    

    希望它能帮助您:)

    在您的示例中,似乎每次初始化一个新的映射器实例时都会进行初始化。我建议您使用依赖项注入,并使用AutoMapper映射配置文件

    你可以通过三个简单的步骤来完成,我认为它回答了你的两个问题:

    第1步: 只需创建一个名为MappingProfile或类似的新类:

    公共类映射配置文件:配置文件
    {
    公共映射配置文件()
    {
    CreateMap();//单向
    CreateMap().ReverseMap();//反向
    }
    }
    
    步骤2:在Startup.cs中注册自动映射器

    //注册自动映射器
    AddAutoMapper(Assembly.getExecutionGassembly());
    
    第3步:在DI上使用映射器

    公共用户服务(IMapper映射器){
    _映射器=映射器;
    }
    //就这么说吧
    _mapper.Map(用户);
    

    希望它能帮助您:)

    不要使用m作为前缀,下划线对于C已经足够了:)不要使用m作为前缀,下划线对于C已经足够了。)
    var itemDtos = m_itemDtoMapper.Map<IEnumerable<ItemEntity>, ICollection<ItemDto>>(items);