我有两个通过第三个类相互依赖的类。我正在努力寻找使用AutoMapper正确映射它们的方法 (版本6.1.1)。
我已经创建了一个示例,尽可能清楚我想要实现的目标。这个例子看起来很傻,但是要明白这是一个非常简单的例子,用于这个问题的目的(但是这个问题的背后是一个我无法轻易重构的大型应用程序)
public class PersonDto
{
public int Id { get; set; }
public string Name { get; set; }
public List<RelationshipLinkDto> RelationshipLinks { get; set; }
}
public class RelationshipDto
{
public int Id { get; set; }
public string Name { get; set; }
}
public class RelationshipLinkDto
{
public int RelationShipId { get; set; }
public int PersondId { get; set; }
public bool IsStrongRelationship { get; set; }
}
正如你所看到的,这种关系有&#34; IsStrongRelationship&#34;因此,它不是一个简单的关系链接,我们习惯在数据库中找到它。知道真正的应用程序有很多这些&#34;选项&#34;属性。
这里是这些对象的商业代表。
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public List<RelationshipLink> RelationshipLinks { get; set; }
}
public class Relationship
{
public int Id { get; set; }
public string Name { get; set; }
}
public class RelationshipLink
{
public RelationshipLink(Relationship relationship)
{
Relationship = relationship;
}
public int RelationshipId
{
get { return Relationship.Id; }
}
private Relationship Relationship { get; }
}
这是棘手的部分:是否有可能在映射时构建RelationshipLink的业务版本,因为它只能在那时访问构造函数所需的关系业务对象?
重要信息是&#34;我如何访问这些Person对象&#34;。 PersonDto和RelationshipDto都包含在文件中找到的列表中,文件本身是名为&#34; FileContainerDto&#34;的DtO。以下是该文件的Dto和Business表示:
public class FileContainerDto
{
public List<PersonDto> People { get; set; }
public List<RelationshipDto> Relationships { get; set; }
}
public class FileContainer
{
public List<Person> People { get; set; }
public List<Relationship> Relationships { get; set; }
}
我已经有了一个计划B,它将对关系链接成员使用Ignore()选项。在反序列化之后,我只需手动创建对象的业务版本。这将非常简单,但我很好奇,如果Automapper能够处理这种映射本身,那将是整洁的:)