0

この質問はJayDataフォーラムに寄せられましたが、これは興味深いトピックであり、他の人も恩恵を受ける可能性があるため、ここで共有することにしました。

V3nomによる»2012年10月23日火曜日午後2時6分

JayDataでwebsqlトランザクションに関する情報を見つけるのに苦労しています。誰かがヒントやリンクを与えることができますか?

http://jaydata.org/forum/viewtopic.php?f=3&t=101&sid=8accd7bf5bed872b6e88d36004a280c5

4

1 に答える 1

3

トランザクションは、ストレージに依存しない方法でサポートするのは簡単なことではありません。したがって、JayDataを使用した明示的なトランザクション管理はなく、EntityContextの暗黙的な「オールオアナッシング」動作を使用できます。webSQLに関しては、各デルタパッケージ(つまり、いくつかのadd/updateアイテムとsaveChanges()最後のa)が同じwebSQLトランザクションで実行されます。アイテムの保存中にエラーが発生した場合、以前のすべての挿入/更新がロールバックされます。

これが実際に動作していることを示す非常に単純な例:次のコードは、2つの項目をテーブルに挿入し、重複キーエラーシナリオを作成します。最終的に、2番目の挿入が重複を拒否された場合でも、テーブルに行はありません。

$data.Entity.extend("item", {
    ID: { key: true, computed: true, type: 'int' },
    data: { type: 'string' }
});

$data.EntityContext.extend("ItemsContainer", {
    items: { type: $data.EntitySet, elementType: item }
});

var offlinedb = new ItemsContainer({
    name: 'sqLite',
    databaseName: 'itemdb'
});

function createLocalData() {
    offlinedb.items.add({ data: 'apple' });
    offlinedb.items.add({ data: 'orange', ID:1 });
    offlinedb.saveChanges(
        function () {

        }
    );
}

これにより、プログラムレベルのロールバックが作成され、セットレベルとコンテキストレベルのイベントハンドラーをフックして、それらに例外をスローできます。詳細はこちら: http: //jaydata.org/blog/entitycontext-and-entityset-scoped-event-handlers-in-jaydata-1.2

于 2012-10-23T18:27:01.597 に答える