【问题标题】:How can i set the external data that not exist dto object to domain on automapper如何在自动映射器上将不存在 dto 对象的外部数据设置为域
【发布时间】:2017-12-23 13:47:04
【问题描述】:

我使用 Dto 将数据传输到域并使用 automapper 进行映射。 我的问题是,不存在 dto 但我需要在映射到域之前设置的属性。 我曾尝试使用 Linq 查询在映射方法之前和之后从 db 获取外部数据,但 linq 查询给出错误。

下面的示例

FooDto

public class FooDto 
{
public int MyProperty1 {get;set;}
}

FooDomain

public class Foo 
{
public int MyProperty1 {get;set;}
public int MyProperty2 {get;set;}
public int Foo2ID {get;set;}
public virtual Foo2 Foo2 {get;set;}
}

Foo2Domain

public class Foo2
{
public int ID {get;set;}
public int MyProperty1 {get;set;}
}

**自动映射器*

Mapper.Initialize(x =>
{
x.CreateMap<FooDto, Foo>().BeforeMap(
(src, dest) =>dest.MyProperty2 = dest.Foo2.MyProperty1);
}

我想使用映射将 Foo2.MyProperty1 设置为 Foo.MyProperty2。

【问题讨论】:

  • 我有一个问题,如果你这样做 .BeforeMap 不是 dest DTO 为空吗?我认为 dest.Foo2 会抛出空引用异常。这是对的还是我离基地很远?
  • @Woot 你是对的。如何使用 linq 查询从另一个表中获取数据?

标签: c# asp.net linq asp.net-web-api automapper


【解决方案1】:

如果我的假设错误,可能需要编辑此答案。我所做的假设是源对象具有正确的数据。根据您的示例,您的源对象的 MyProperty2 似乎可以在目标对象中设置,因此请映射此所有您需要做的事情是:

Mapper.Initialize(x =>
{
    x.CreateMap<FooDto, Foo>()
    .ForMember(dest => dest.MyProperty2, opt => opt.MapFrom(src => src.MyProperty1))
    .ForMember(dest => dest.Foo2.MyProperty1, opt => opt.MapFrom(src => src.MyProperty1));
}

当我给你一个 FooDto 类型的对象并且我请求一个 Foo 类型的对象时,这段代码会告诉 AutoMapper。对于目标对象属性“Foo2.MyProperty1”和“MyProperty2”,使用选项方法 MapFrom。转到源对象获取 MyProperty1 并将其值分配给我的目标对象 MyProperty2 和 Foo2.MyProperty1。

我认为这会解决你的问题。

对不起,我更正了答案

【讨论】:

  • src 对象不是实体它是 FooDto 所以源对象没有 Foo2 属性
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-19
  • 2016-10-10
  • 2022-10-22
  • 1970-01-01
相关资源
最近更新 更多