Breeze は、これらのデータを保存するときに、サーバー側でデータに何が起こったかを確認できません。Breeze チームは、データを更新するには再クエリを実行する必要があると述べています。この保存中に同期的に実行されるアクション (SQL トリガー (expl. After Insert) など) は、これらの操作が保存中にエンティティを変換できるため、クライアントで実行されるため、考慮される場合があります。これは、マルチパート キーのように Breeze によって生成されない新しいキーに役立ちます。 . この問題を回避するのは困難です。ヘルプ?
更新 1: これが Breeze の原則である場合、おそらくバグです。
1)トリガー(サーバー側)はエンティティ(テーブル)の一部です
2) 使用したフレームワーク:
- サーバー側フレームワーク: .NET Framework 4.5
- クライアント フレームワーク: Breeze 1.3.5
- ビュー フレームワーク: ノックアウト 2.2.1
3) saveChanges からの結果シナリオ:
function saveTousRecos() {
return manager.saveChanges()
.then(success)
.fail(fail);
function success(saveResult) {
/* do your post-save work here */
axi = saveResult.entities[0].jobtab();
// axi is an identity key generated at server and sent back to client by Breeze
// result : Breeze value = (195), the same as server-side (195)
ara = saveResult.entities[0].seqtab();
// ara is a property value inserted by sql FOR INSERT trigger,
// result : Breeze value = (NULL), server-side has (13)
logger.log("Saving succeded... ");
}
function fail(error) {
logger.log("Saving failed: " + error.message);
}
}
PS : SQL トリガーによって挿入されたすべての値は、キャッシュからではなくサーバーからエンティティを再呼び出ししない限り、まったく表示されません。私が推測する解決策ではなく、回避策のようです。
更新 2: Breeze は、私の戻りエンティティをODataのように見なしていると思います。
1) 私の Breeze Api コントローラから、私はこれを使用します:
return _contextProvider.Context.clients.Where(uc => uc.refclie == rqnoclie);
2) Breeze は次のように述べています。ODataでは、サーバー側の計算フィールドの値の変更は、更新後に Breeze で利用できなくなります。これらの値を更新する必要がある場合は、再クエリを実行する必要があります...
3) したがって、今からの解決策は、計算結果またはトリガー結果を取得するための REQUERY (良いニュースではありません) です。BeforeSaveEntity インターセプターの将来がこの問題を解決することを願っています。または、Breeze の純粋なエンティティ (OData ではなく、サーバー側で計算またはトリガーされる) を取得するにはどうすればよいですか? このトラブルから抜け出す方法はありますか?