我有点问题。我不太清楚如何处理这种情况所以我只是解释一个简化的场景,希望你能帮助我。
我正在尝试将父数据库对象映射到父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; }
}
这是我的mapper类/方法:
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,但我并不满足于那里唯一的答案。
答案 0 :(得分:0)
不应该更好 -
parent.Child = childMapper.MapFromSource(parentDO.FoeignKeyToTheChild);
我认为你应该有通过Id获取对象的方法。
编辑:如果你的映射器没有DataAccess
代码,那么你必须在Repository
内映射孩子。由于您的Repository
已准备好DataObjects,您可以通过以下方式执行此操作 -
ParentMapper:
public class ParentMapper
{
public Parent MapFromSource(ParentDo parentDo)
{
Parent parent = new Parent();
parent.Id = parentDo.Id;
return parent;
}
}
ChildMapper:
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
代码。