我正在尝试使用AutoMapper从DTO映射到我的域。
我的DTO可能看起来像这样:
public class MyDTO
{
public string Name { get; set; }
public bool OtherProperty { get; set; }
public ChildDTO[] Children { get; set;}
}
public class ChildDTO
{
public string OtherName { get; set; }
}
My Domain对象如下:
public class MyDomain
{
public string Name { get; set; }
public bool OtherProperty { get; set; }
public ISet<ChildDomain> Children { get; set; }
}
public class ChildDomain
{
public string OtherName { get; set; }
}
如何设置AutoMapper以便能够从这些Array映射到Set。似乎AutoMapper正在使用Array并将它们转换为IList,然后转换为ISet失败。
这是例外
Unable to cast object of type 'System.Collections.Generic.List`1[DataTranser.ChildDTO]' to type 'Iesi.Collections.Generic.ISet`1[Domain.ChildDomain]'.
我希望找到一种简单的通用方法,以便最大限度地减少从DTO映射到域所需的基础设施。非常感谢任何帮助。
的更新:
那么我将如何建模MyDomain - &gt; ChildDomain没有结束贫血领域模型?我知道,如果没有MyDomain或ChildDomain中的业务逻辑,域模型目前仍然很贫乏,但目标是在我们前进的过程中添加业务逻辑。我只是想确保我的视图模型可以转换为域模型并保持不变。
您对此方案有何建议,从视图和域之间的简单映射转移以及稍后添加业务规则?
再次感谢您的帮助。
答案 0 :(得分:4)
如果您的持久层很简单,使用UseDestinationValue()将告诉AutoMapper不要替换底层集合:
ForMember(dest =&gt; dest.Children,opt =&gt; opt.UseDestinationValue())
但是,如果不简单,我们只需手动更新回域。更新域模型的逻辑通常会变得更加复杂。执行反向映射会对域模型的形状施加约束,这可能是您不想要的。
答案 1 :(得分:1)
答案:
一些评论: