【问题标题】:Going nuts with Breeze, Linq, DTO's, projections与 Breeze、Linq、DTO、预测一起疯狂
【发布时间】:2013-06-27 14:58:50
【问题描述】:

经过一段时间的挣扎,为了在享受 Breeze 元数据的同时保护我的模型,我终于为元数据创建了第二个 DbContext。那就是传递给 EFContextProvider 的那个。所以我有一个用于模型的 DbContext,以及一个用作数据访问层的 DbContext。 之后,我努力使用 automapper 在 linq 投影中进行自动映射,但一直遇到空引用异常。但是,这个库:http://linqprojector.codeplex.com/ 相关并使用完全相同的语法,可以完美运行。 现在,我的服务器上有一个方法可以实际返回我想要的:一个 dto,包含一个列表。 假设我有一个类博客,其中包含模型中的帖子列表。该方法返回一个包含 PostsDTO 列表的对象 BlogDTO。

但是,在 Breeze 中,在 BlogDTO 对象中,帖子数组保持为空。我亲眼目睹了数据被发送到浏览器,但由于某种原因,Breeze 忽略了其中的一些!

老实说,沿着这条路走下去确实有很多问题需要解决。

只是想和你们分享。如果有人理解这一点并可以帮助我。这是微风查询:

 var query = EntityQuery
            .from('BlogWithPosts')
            .withParameters({id: blogId});

return manager.executeQuery(query)
                .then(querySucceeded)
                .fail(queryFailed);

function querySucceeded(data) {
            console.log(data);
            var s = data.results[0];
            return blogObservable(s);
        }

所以要明确一点,在对象数据中,在 XHR 属性中,responseText 属性包含我想要的所有数据!我必须自己解析吗?那么让我的元数据变得轻而易举有什么意义......

【问题讨论】:

  • 好的。在短暂的休息和一杯甜柠檬啤酒之后,我一直在研究这个。当检查breeze.debug.js 中rawEntities 中的结果时,executeQueryCore 函数中的第11394 行,我看到了,我的posts 数组实际上已填充。在那一点上还没有观察到任何东西。更进一步,我发现实际上是函数 mergeEntity 使每个属性都可观察,并且不知何故丢失了我的数组。
  • Breeze 尝试识别 json 结果并将其解析为实体,如果不能,则将它们单独放置。我的猜测是,微风没有您返回的实体类型的元数据。如果您返回 DTO 并且没有将这些 DTO 的“实体类型”添加到 metadataStore,则会发生这种情况。
  • 感谢您的评论(我正在度假,无法早点回答)。我检查了服务器上对 Metadata 的调用返回了什么,并且所有必要的实体类型都正确返回。所以问题一定出在其他地方

标签: breeze


【解决方案1】:

好吧,我终于想通了。显然 Breeze 需要 InverseProperty 属性。设置完成后,我可以看到我的相关实体!

【讨论】:

    【解决方案2】:

    其他需要考虑的重要因素:避免在你的类中循环引用。否则,据我所知,Breeze 可能只是简单地忽略相关实体。

    【讨论】:

    • 这个不太确定。
    猜你喜欢
    • 2015-02-10
    • 1970-01-01
    • 1970-01-01
    • 2010-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多