首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Breeze不能使用Breeze 1.4.14中具有.expand子句的查询返回扩展实体

Breeze不能使用Breeze 1.4.14中具有.expand子句的查询返回扩展实体
EN

Stack Overflow用户
提问于 2014-06-28 07:54:11
回答 2查看 162关注 0票数 1

我现在使用的是Breeze 1.1.14,之前我使用的是Breeze 1.1.11。当我使用Breeze 1.1.11时,我可以使用扩展实体和带有.expand子句的查询,我的结果集将包含扩展实体。在Breeze 1.1.14中,情况不再是这样。如果我使用.expand子句,我将只返回实体的非扩展部分。

下面是一个示例:首先声明扩展实体:

代码语言:javascript
复制
var projectAugmented = function() {
    this.LastFirstName = ko.observable("");
    this.ProjectNameTemp = ko.observable("");
    this.flushYesNo = ko.observable(false);
};

metadataStore.registerEntityTypeCtor("tblProjects", projectAugmented);

然后创建一个使用扩展实体的函数:

代码语言:javascript
复制
var getProject = function(projectName) {
    var deferred = Q.defer();
    var predicate = new breeze.Predicate("ProjectName", "==", projectName);
    var qry = new breeze.EntityQuery()
        .from("GetProject")
        .where(predicate)
        .expand("tblProjects_Techs, tblProjects_GSIDs, tblProjects_Customers, tblLogBook");

    manager.executeQuery(qry.using())
        .then(function(r) {

            deferred.resolve(r.results);
        })
        .fail(qryFailed);

    function qryFailed(e) {
        deferred.reject(new Error(e));
    }

    return deferred.promise;
};

如果我使用Breeze 1.4.14运行查询,查询将不会返回任何扩展的实体值。如果删除.expand子句,查询将返回扩展的实体值。此功能存在于Breeze 1.4.11中。这是一个bug,还是Breeze 1.4.14中的一个新特性。如果它是一个新特性,那么它的文档记录在哪里?

EN

回答 2

Stack Overflow用户

发布于 2014-07-01 05:41:21

我们没有做任何有意改变你所期望的行为的事情。我不想大肆宣扬显而易见的事情,但在许多这样的情况下,事实证明,应用程序代码中的更改导致了不幸,而不是Breeze版本的更改。

所以,请迁就我,并绝对肯定地确认你的说法。我的意思是,您使用与完全相同的代码,并显示将v.1.4.14替换为1.4.11本身就会导致问题

FWIW,你可以通过省略观察值来简化你的自定义构造函数。简单的属性定义就可以了。

代码语言:javascript
复制
var projectAugmented = function() {
    this.LastFirstName = "";
    this.ProjectNameTemp = "";
    this.flushYesNo = false;
};

如果你能确认1.4.14出了什么问题,我很好奇简化的构造函数会不会有什么不同。

杂费

你不需要使用像deferred这样的东西来做你自己的承诺工作。您正在使用的breeze查询方法已经返回了承诺。

代码语言:javascript
复制
var getProject = function(projectName) {
    return new breeze.EntityQuery()
        .from("GetProject")
        .where("ProjectName", "==", projectName)
        .expand("tblProjects_Techs, tblProjects_GSIDs, tblProjects_Customers, tblLogBook")
        .using(manager).execute()
        .then(function(data) {return data.results;});
        // no need for your fail clause because it's work is already in a failed promise from breeze
};

看到没有多余的promise dreck有多清爽了吗?

票数 1
EN

Stack Overflow用户

发布于 2014-07-09 06:28:54

我找到了这个问题的答案。当我查看连接到我的应用程序的packages文件夹时,我看到我有版本1.4.12和版本1.4.14的Breeze模块。我发现这很有趣,因为在我尝试升级到Breeze 1.4.14之前,应用程序的原始版本包含Breeze 1.4.11和Breeze 1.4.12模块。

解决方案是从packages文件夹中删除所有的“Breeze”模块。然后我在我的Visual Studio 2013环境中运行了一个干净的解决方案。然后,我使用NuGet包管理器重新加载了“微风”模块。在我加载Breeze 1.4.14模块后,packages文件夹只包含Breeze 1.4.14模块。

在加载1.4.14版本的Breeze模块后,我仍然有大量的工作要做,因为1.4.11版本的Breeze的语法与1.4.14版本的Breeze不同。

我不得不在BreezeController.cs中将Queryable的所有实例替换为EnableQuery。我还必须用IEnumerable<>替换IQueryable<>的所有实例。一旦进行了这些更改,我重新构建了应用程序,应用程序就可以正常工作了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24462265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档