【发布时间】:2014-01-27 17:16:43
【问题描述】:
我在以下配置中使用 AutoMapper 将对象从 Nhibernate 查询转换为我的 DTO 时遇到困难
假设我有 4 节课。
class A
{
//some fields of built-in type
}
abstract class B //Some class derived this one, but this is not important here
{
//some fields of built-in type
public A refA { get; set; }
}
class C
{
//some fields of built-in type
public B refB { get; set; }
}
class D
{
//some fields of built-in type
public B refC { get; set; }
}
我使用 AutoMapper 将其转换为我的 DTO,为了简单起见,这里假设 DTO 是这些类的精确副本。 我想通过wire发送这个,所以在序列化之前,我要求AutoMapper将它转换为D-Class对应的DTO。
如果我制作这些对象并自己配置字段,当我调用时
Mapper.Map<T1,T2>(T1 source)
这是有效的。所以我的配置 AutoMap 正在工作。更多它也与
Mapper.Map<IList<T1>,List<T2>
很好。
现在我制作这些对象,将它们放入数据库中,并使用 Nhibernate 向我的 SQL DB 调用请求以检索 IList(D 类列表)。
如果我现在尝试在 DTO 中转换它,它就不再起作用了。
我在 AutoMap 中跟踪代码,它正确映射了 class D 中的所有内置类型字段,然后它来到了 refC,在这里它在某个地方崩溃了。
我知道延迟加载以及 Nhibernate 只是给我一个 C 类引用的代理,但我不知道如何解决这个问题。
让您知道NHibernateUtil.IsInitialized(refC) is true
非常感谢
【问题讨论】:
-
我使用了这个 SO 帖子:stackoverflow.com/questions/11816732/… 并查看了 github 上发布的罗马人(在第一个答案的 cmets 中:github.com/RomansWorks)我改进了他的代码以适合我更一般的情况.如果有人感兴趣,请问我。它使用 ValueInjecter 来解析映射,几乎不需要配置(都是 generic-reflec)。
标签: c# nhibernate automapper