我现在使用的是Breeze 1.1.14,之前我使用的是Breeze 1.1.11。当我使用Breeze 1.1.11时,我可以使用扩展实体和带有.expand子句的查询,我的结果集将包含扩展实体。在Breeze 1.1.14中,情况不再是这样。如果我使用.expand子句,我将只返回实体的非扩展部分。
下面是一个示例:首先声明扩展实体:
var projectAugmented = function() {
this.LastFirstName = ko.observable("");
this.ProjectNameTemp = ko.observable("");
this.flushYesNo = ko.observable(false);
};
metadataStore.registerEntityTypeCtor("tblProjects", projectAugmented);然后创建一个使用扩展实体的函数:
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中的一个新特性。如果它是一个新特性,那么它的文档记录在哪里?
发布于 2014-07-01 05:41:21
我们没有做任何有意改变你所期望的行为的事情。我不想大肆宣扬显而易见的事情,但在许多这样的情况下,事实证明,应用程序代码中的更改导致了不幸,而不是Breeze版本的更改。
所以,请迁就我,并绝对肯定地确认你的说法。我的意思是,您使用与完全相同的代码,并显示将v.1.4.14替换为1.4.11本身就会导致问题。
FWIW,你可以通过省略观察值来简化你的自定义构造函数。简单的属性定义就可以了。
var projectAugmented = function() {
this.LastFirstName = "";
this.ProjectNameTemp = "";
this.flushYesNo = false;
};如果你能确认1.4.14出了什么问题,我很好奇简化的构造函数会不会有什么不同。
杂费
你不需要使用像deferred这样的东西来做你自己的承诺工作。您正在使用的breeze查询方法已经返回了承诺。
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有多清爽了吗?
发布于 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<>的所有实例。一旦进行了这些更改,我重新构建了应用程序,应用程序就可以正常工作了。
https://stackoverflow.com/questions/24462265
复制相似问题