我是BreezeJS的新手,想知道如何在SQL存储过程中使用Breeze吗?BreezeJS和存储过程
我们有一些非常复杂的查询,希望能够通过SP调用它们。另外,我们如何告诉Breeze从SP返回的列是Key?我们不想使用视图,因为我们每次调用它时都需要将变量传递给SP查询。
谢谢。
鲍勃
我是BreezeJS的新手,想知道如何在SQL存储过程中使用Breeze吗?BreezeJS和存储过程
我们有一些非常复杂的查询,希望能够通过SP调用它们。另外,我们如何告诉Breeze从SP返回的列是Key?我们不想使用视图,因为我们每次调用它时都需要将变量传递给SP查询。
谢谢。
鲍勃
好,其基本思想是使用微风的EntityQuery.withParameters方法将参数传递给调用您的存储过程,并返回一个IEnumerable的服务器端方法。 (即存储的proc的结果)。
如果您想将此结果作为Breeze实体的集合对待,那么您需要将结果整形为Breeze从元数据知道的现有实体类型,或者在客户端上手动创建并添加一个新的EntityType你想要返回的形状。
你可能想看看EntityQuery.toType方法强制微风您返回的数据转换为特定的EntityType或者你可能要交替使用“jsonResultsAdapter”做同样的事情。
,其从查询返回的并且被转换成一个微风的EntityType任何数据都根据“modelLibrary”在使用中,即敲除,角,骨干自动换等
如果微风不能够构建实体在返回的数据之外,它仍然会被返回,但是没有任何特殊的处理来包装结果。
希望这会有所帮助!
这里不是一个真正的答案,只是一些想法。 我认为通过使用withParameters通过使用存储过程来返回任意形状的数据(读取视图模型)的能力将是一个很好的方式来解决诸如dapper.net之类的问题。重新提交视图模型后,您可以使用重载来重建视图模型中的实际实体并保存更改。我遇到的唯一问题是,人们需要一种方法来轻松自动地重新运行sproc并将数据发送回客户端... 如果这对其他人有意义并且/或者如果任何人有已经完成了。 对于这种场景,我认为你需要禁用微风提供的功能和/或编写一个足够智能的数据服务,它可以处理视图模型,以便客户端上的javascript知道何时添加/删除/更新您创建对象jx,jy,jz(j代表javascript)的视图模型a的部件x,y,z,并将它们提交回并保存(与上面提到的方式相反) 想法?
从Breeze访问Sql Stored Procedures的示例;商店程序(GoStoCde)已由EF导入。
微风控制器:
[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
}
}
如果你喜欢代替对象,代码因此其必须的返回实体也工作。 希望这有助于!
这很有帮助。我想知道是否有任何代码示例? –
对不起,还没有!但我们确实有很多成功使用过它们的人。 –