我是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
}
}
如果你喜歡代替對象,代碼因此其必須的返回實體也工作。 希望這有助於!
這很有幫助。我想知道是否有任何代碼示例? –
對不起,還沒有!但我們確實有很多成功使用過它們的人。 –