AutoMapper-具有相同类型的多个属性的ProjectTo类

时间:2019-05-27 08:30:47

标签: c# automapper

最近发现了有关AutoMapper的ProjectTo<>方法的信息,所以我一直在研究它。

到目前为止,一切都很好,直到我遇到了一个具有多个相同类型属性的类,例如:

400px

似乎它为单个Child关系而不是为两者生成SQL:

public class RandomDto
{
    public int Id {get;set;}
    public ChildDto FirstChild {get;set;}
    public ChildDto SecondChild {get;set;}
}

我尝试过

SELECT CASE
    WHEN [dtoRandom].[FirstChild_FK] IS NULL
    THEN CAST(1 AS BIT) ELSE CAST(0 AS BIT)
END, [t0].[Child_Description]
END, [dtoRandom].[Id]
FROM [Randoms] AS [dtoRandom]
INNER JOIN (
    SELECT [s].*
    FROM [Childs] AS [s]
) AS [t0] ON [dtoRandom].[FirstChild_FK] = [t0].[Id]

都返回第一个,第二个为空

不确定我是否需要设置自定义别名或其他东西才能工作?

1 个答案:

答案 0 :(得分:0)

我经历了相同的行为,并尝试通过对第二个导航属性使用另一个类来解决该问题,该类仅从原始类派生。

public class ChildDtoTmp : ChildDto { }

public class RandomDto
{
    public int Id { get; set; }
    public ChildDto FirstChild { get; set; }
    public ChildDtoTmp SecondChild { get; set; }
}

这很好用,但是由于导航属性的类型具有另一个导航属性,因此嵌套导航属性会显示相同的奇怪行为。

public class ChildDto
{
    public int Id { get; set; }
    public InnerChildDto InnerChild { get; set; }
}

这导致属性FirstChildSecondChild被映射,但是仅InnerChild的{​​{1}}属性被映射。

也许这可以帮助某人找出解决方法。