在映射时提供构造函数参数

时间:2017-09-02 18:18:32

标签: c# automapper

我有两个通过第三个类相互依赖的类。我正在努力寻找使用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能够处理这种映射本身,那将是整洁的:)

0 个答案:

没有答案