最近发现了有关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]
都返回第一个,第二个为空
不确定我是否需要设置自定义别名或其他东西才能工作?
答案 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; }
}
这导致属性FirstChild
和SecondChild
被映射,但是仅InnerChild
的{{1}}属性被映射。
也许这可以帮助某人找出解决方法。