0

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 ではなく、サーバー側で計算またはトリガーされる) を取得するにはどうすればよいですか? このトラブルから抜け出す方法はありますか?

4

1 に答える 1

0

BreezeEFContextProviderは、保存したエンティティを再クエリし、クライアントに送り返します。そのため、それらのトリガーが entity-being-saved を更新する場合、SQL トリガーによって更新された値をクライアントに送り返します。たとえば、エンティティ 'A' を保存し、トリガーがエンティティ 'A' の値を更新すると、 は 'A'EFContextProviderを再クエリし、それらの更新された値をクライアントに送信します。

これが真実ではないことを証明できるかどうかお知らせください。それはバグだと思います。

Breeze は、SQL トリガーによって更新された他のエンティティについて知りません...そして知ることもできません。Breeze は、エンティティ 'A' を保存したときにエンティティ 'B' がトリガーによって更新されたことを認識できず、'B' を照会してクライアントに送信する理由がありません。

于 2013-06-04T01:50:36.527 に答える