- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的域 A 和 B 中有 2 个对象
对象A有B的属性对象 B 具有列表属性
当我点击 B 的数据库时,它会返回一个 A 列表,但每个 A 都有一个 B,而 B 又有一个 A 列表。一遍又一遍。
显然是延迟加载问题。延迟加载已打开,但我的问题是这是一个 WCF 服务,我是否需要将我所有的域对象转换为 dto 对象以发送到网络,当我这样做时执行以下操作 - 伪代码
ADTO adto Transform(ADomain a)
{
adto.name = a.name;
adto.surname = a.surname;
adto.B = Transform(a.B);
}
BDTO bdto Transform(BDomain b)
{
bdto.bob = b.bob;
foreach (A a in b.As)
{
bdto.bs.add(Transform(a));
}
}
那么我怎样才能让我对集合的获取只深入一层。
B的映射:
HasMany(x => x.As)
.Cascade.AllDeleteOrphan()
.Fetch.Select()
.Inverse().KeyColumn("AId");
A的映射:
References(x => x.B).Column("AId");
最佳答案
好吧,要通过 WCF 传递循环引用,您应该使用 IsReference
调整父 DTO (B)参数DataContractAttribute.IsReference Property (或此处 The Problem of Circular References)。
Use the IsReference property to instruct the DataContractSerializer to insert XML constructs that preserve object reference information.
[DataContract(Namespace = "http://domain.../", IsReference=true)]
public class BDTO ...
给你答案:
...so how can i make my fetch of the collection only go one layer deep.
NHibernate 不会有循环引用的任何问题。更重要的是,您只需执行 2 个 SQL 查询即可轻松获取所有数据。调整映射:
HasMany(x => x.As)
.Cascade.AllDeleteOrphan()
.BatchSize(25)
//.Not.LazyLoad()
.Inverse()
.KeyColumn("AId");
注意:仅当 A 对象几乎总是需要 B 工作时,Not.LazyLoad 才有意义。当使用“惰性”模式时,您必须在整个 WCF 服务处理期间保持 session 打开
BatchSize设置将优化 B 对象的加载列表。在这里阅读更多:http://ayende.com/blog/3943/nhibernate-mapping-set
NHibernate session 将执行两个查询 1) Select B
和 2) Select A for all B
并将结果具体化为完整的 A 和 B 实例,并完全填充双向引用。 NHibernate session 将为您提供完全加载的实例。偶来电Get<A>(id)
和 Get<B>(id)
将从 session 中检索对象
接下来的步骤由您决定,您可以使用 DTO 对象、映射工具来转换它们...
关于wcf - 流利的 hibernate 循环引用疼痛,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14773378/
我正在尝试将fluentd与elasticsearch连接起来,并且在启动td-agent服务时遇到此错误。 td-agent.log: 无法与Elasticsearch通信,重置连接并重试。连接被拒
所以我有一个案例,布局已经变得更加复杂。有一些常见的东西,比如 @section styleIncludes{ ... } ,然后是其他部分,这些部分定义了每个页面可以选择(但几乎总是)指定的各种内容
我刚刚看到一个巨大的 Java 正则表达式,它让我对一般正则表达式的可维护性有所思考。我相信大多数人——除了一些糟糕的 perl 贩子——都会同意正则表达式很难维护。 我在考虑如何解决这种情况。到目前
我有一个 12 秒长的 audio.mp3 文件video.mp4 的长度为 60 秒。 我需要在视频的第 40 秒插入audio.mp3。 如何使用 Node-Fluent-ffmpeg 做到这一点
我正在使用 NHibernate + Fluent 来处理我的应用程序中的数据库。到目前为止,我一直在使用 SessionSource 来创建我的 ISession 对象。我现在对来自 NHibern
我在 Java 控制台应用程序中使用 Apache HttpClient 4.5(具有流畅的界面)。我注意到,它的默认超时值似乎是无限的,但我必须为我发送的请求使用非无限的超时值。我想对所有请求使用相
这是我的路线: router.get("answers","delete", Int.parameter) { req -> Future in let answerID = try
我有随机“ session 已关闭!” Autofac 和 Fluent nHibernate 的以下配置错误: 全局.asax.cs: builder.Register(x => new NHibe
我是一名优秀的程序员,十分优秀!