我正在尝试将一个对象映射到另一个对象,但对象非常复杂.在开发过程中,我希望能够排除一堆字段并逐个访问它们,或者能够指定仅映射我想要的字段并在每次测试成功时增加它们.
所以:
class
string field1
string field2
string field3
Run Code Online (Sandbox Code Playgroud)
现在我想映射field1,测试,修复然后移动到field2那时field3.
这可能吗?
这不是一个问题,因为我找到了一种方法来做我想做的事情,但似乎应该有更好的方法来做到这一点.我到处搜索,没找到任何东西.
基本上,我有我认为非常标准的对象模型.
public class Parent
{
private readonly IList<Child> _children = new List<Child>();
public IEnumerable<Child> Children { get { return _children; } }
public void AddChild(Child child)
{
child.Parent = this;
_children.Add(child);
}
}
Run Code Online (Sandbox Code Playgroud)
和
public class Child
{
public Parent Parent { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
(为了清楚起见,我省略了与问题无关的属性以及错误检查和保护......)
public class ParentDTO
{
List<ChildDTO> Children = new List<ChildDTO>();
}
Run Code Online (Sandbox Code Playgroud)
和
public class ChildDTO
{
}
Run Code Online (Sandbox Code Playgroud)
我使用方法将子项添加到集合的原因是为了保持对添加子项时需要处理的业务逻辑的控制.
使用标准映射:
Mapper.CreateMap<Parent, ParentDTO>();
Mapper.CreateMap<ParentDTO, Parent>();
Mapper.CreateMap<Child, ChildDTO>();
Mapper.CreateMap<ChildDTO, Child>();
Run Code Online (Sandbox Code Playgroud)
它似乎从服务层工作得很好.域对象的子项完美映射到ChildDTO实例列表.
但是,当以相反的方式映射时,域模型上的集合未设置 - 因为它显然是只读的.似乎没有任何方法可以使用AutoMapper直接设置私有字段.我已经尝试了在这里和互联网的其他部分找到的各种建议. …