我是BreezeJS的新手,想知道是否有关于如何使用SQL存储过程使用Breeze的示例?
我们有一些非常复杂的查询,希望能够通过SP调用它们。另外,我们如何告诉Breeze从SP返回的列是密钥?我们不想使用Views,因为我们每次调用它时都需要将变量传递给SP查询。
感谢。
鲍勃
答案 0 :(得分:3)
好的,基本的想法是使用Breeze的 EntityQuery.withParameters 方法将参数传递给调用存储过程并返回IEnumerable的服务器端方法。 (即存储过程的结果)。
如果要将此结果视为Breeze实体的集合,则需要将结果整形为Breeze从元数据中了解的现有实体类型,或者在客户端上手动创建并添加与形状匹配的新EntityType你想要回归
您可能需要查看 EntityQuery.toType 方法以强制breeze将返回的数据转换为特定的EntityType,或者您可能还想使用“ jsonResultsAdapter “做同样的事情。
从查询返回并转换为Breeze EntityType的任何数据都会根据使用的“modelLibrary”自动换行,即Knockout,Angular,Backbone等。
如果breeze无法从返回的数据中构造实体,那么它仍将被返回,但没有任何特殊处理来包装结果。
希望这有帮助!
答案 1 :(得分:1)
从Breeze访问Sql存储过程的示例;商店程序( GoStoCde )已由EF导入。
Breeze Controller:
[HttpGet]
public object GetCdes(long jprod, int jqte, long jorder)
{
//output params
var owrk = new System.Data.Objects.ObjectParameter("wkres", typeof(string));
owrk.Value = "";
var oeror = new System.Data.Objects.ObjectParameter("ceror", typeof(int));
oeror.Value = 0;
//invoke stored procedure
var envocde = _contextProvider.Context.GoStoCde(jprod, jqte, jorder, owrk, oeror);
//stored procedure results
var cdeResult = new {
dwork = owrk.Value,
deror = oeror.Value,
};
return new { cdeResult };
}
Datacontext:
function reqLnecde(iprod, iqte, iorder, vxeror) {
logger.log("commande en cours...");
var query = new EntityQuery.from("GetCdes")
.withParameters({ jprod: iprod, jqte: iqte, jorder: iorder });
return manager
.executeQuery(query)
.then(querySucceeded)
.fail(cqueryFailed);
function querySucceeded(data) {
//stored procedure results
vxeror(data.results[0]);
//stored procedure object member value
keror = vxeror().cdeResult.deror;
if (keror === 0) {
logger.log("commande done");
} else {
logger.log("article absent");
}
}
function queryFailed(data) {
logger.log("commande failed"); //server errors
}
}
如果您希望返回实体来代替对象,那么代码也必须起作用。 希望这有帮助!
答案 2 :(得分:0)
这里不是真正的答案,只是一些想法。 我认为通过使用 withParameters 来使用存储过程返回任意形状的数据(读取视图模型)的能力将是与dapper.net等类似的方法。重新提交所述视图模型后,您可以使用重载从视图模型中重建实际实体并保存更改。我唯一的问题是,人们需要一种方法来轻松地自动重新运行sproc并将数据发送回客户端... 如果这对任何其他人都有意义和/或如果有人已经这样做了,我想知道。 对于这种类型的场景,我认为您需要禁用breeze提供的跟踪功能和/或编写足够智能的数据服务,以便以这样的方式处理视图模型客户端知道何时添加/删除/更新viewmodel的部分x,y,z,你创建对象jx,jy,jz(j为j的j)并将它们提交回来并保存,直到上面提到的相反的想法办法) 想法?