【发布时间】:2015-03-18 19:00:15
【问题描述】:
我想将我的业务数据实体与我的数据库数据实体分离,这样可以使我的应用程序更加“独立于数据源”,并且通过这种方式切换数据源,我需要做的只是是为新数据源创建一些新的存储库。
但是,我无法完全确定如何进行映射。 我当前的数据源是来自 Parse.com 的“数据库”,在我第一次尝试进行映射时,我使用了 AutoMapper。
如果我的实体有对自身的引用怎么办?或者,如果“子实体”之一具有对父实体的引用(有点像 EF 那样)?
Class ParentClass
{
public string Name { get;set }
public IEnumerable<ChildClass> Children { get;set; }
}
Class ChildClass
{
public string Name { get;set }
public ParentClass Parent{ get;set; }
}
我假设如果我把它映射起来,它会以一个循环结束?
我遇到的另一个问题是,如果 Children 有一些非常深的参考属性怎么办?
让我们假设 ChildClass 看起来像这样
Class ChildClass
{
public string Name { get;set }
public ParentClass Parent { get;set; }
public IEnumerable<ChildClass> Children { get;set; }
}
我知道这可能是一个愚蠢的例子,但在这种情况下,ChildClass 对象可能对一群孩子有非常深入的引用,而这些孩子可能有一群孩子等等。
如果我使用 AutoMapper 进行映射,我最终会实际映射所有这些子节点,直到没有子节点可供映射。但是,如果我实际上并不需要所有的“子孩子”怎么办?
有没有办法让孩子“懒加载”财产使用?
举个例子:
myParentObject.Children.FirstOrDefault().Children.FirstOrDefault().Children.FirstOrDefault()
这将导致 Children 属性仅“随叫随到”加载
关于如何将数据实体映射到业务实体有什么建议吗?
我假设我真正在寻找的东西可以让自定义业务实体的处理方式与实体框架处理其实体的方式相同。
【问题讨论】: