0

我有点问题。我不太清楚如何处理这种情况,所以我只解释一个简化的场景,希望你能帮助我。

我正在尝试将父数据库对象映射到父 bll 对象。在这个父数据库对象中,有一个指向子 ID 的外键,在我的父 bll 对象中,我使用子 bll 对象(不仅仅包含一个 ID)。

所以这是我的 bll 对象:

public class Parent
{
    public int ID { get; set; }
    public Child Child { get; set; }
}

public class Child
{
    public int ID { get; set; }
    public string FirstName { get; set; }
}

这是我的映射器类/方法:

public class ParentMapper
{
    public Parent MapFromSource(ParentDatabaseObject parentDO)
    {
        Parent parent = new Parent();
        parent.ID = parentDO.ID;
        parent.Child = ???;
        return parent;
    }
}

在这种情况下,我认为 ParentDatabaseObject 的外观并不重要,我只想知道应该如何映射 parent.Child 对象。

我考虑了以下几点:

parent.Child = new Child();
parent.Child.ID = doParent.Child.Id;
parent.Child.FirstName = doParent.Child.FirstName;

这感觉不对,因为我有点想把它放在我的 ChildMapper 中,这导致我采用第二种实现方式(假设我有一个单独的子映射器并有一个名为 childMapper 的实例):

parent.Child = childMapper.MapFromSource(parentDO.Child);

但我有种感觉,使用这种映射方式会使我的代码有点紧密耦合,因为我会在 ParentMapper 中使用 ChildMapper。

所以我想我的问题是:我应该如何实现这种映射。最后一种方法是正确的还是有更好的方法?我已经放弃了我尝试的第一件事。

谢谢你的帮助!

(我在发布这个问题之前做了研究,这是我能找到的最接近的: Data Mapper for Child Objects,但我对那里的唯一答案并不满意)

4

1 回答 1

0

不应该更好吗——

parent.Child = childMapper.MapFromSource(parentDO.FoeignKeyToTheChild);  

我认为您应该有方法通过 Id 获取对象。

编辑:如果您的映射器没有DataAccess编码,那么您必须在您的Repository. 由于您Repository已经准备好 DataObjects,您可以通过以下方式进行操作 -

父映射器:

public class ParentMapper
{
    public Parent MapFromSource(ParentDo parentDo)
    {
        Parent parent = new Parent();
        parent.Id = parentDo.Id;
        return parent;
    }
}  

子映射器:

public class ChildMapper
{
    public Child MapFromSource(ChildDo childDo)
    {
        Child child = new Child();
        child.Id = childDo.Id;
        child.FirstName = childDo.FirstName;

        return child;
    }
}  

存储库:

public class Repository
{
    //you already have parentDo
    //you already have childDo

    public Parent GetParent()
    {
        Parent parent = parentMapper.MapFromSource(parentDo);
        parent.Child = childMapper.MapFromSource(childDo);
        return parent;
    }

    public Child GetChild()
    {
        Child child = childMapper.MapFromSource(childDo);
        return child;
    }
}  

否则,您Mapper必须有权访问DataAccess代码。

于 2012-08-26T20:41:41.290 回答