2012-10-23 28 views

回答

3

交易不是一件容易的事情,支持對存儲不可知的方式。因此,JayData沒有明確的事務管理,而是可以使用EntityContext的隱含「全部或全部」行爲。關於webSQL,每個增量包(即:末尾的add/update項和saveChanges())在同一個webSQL事務中運行。如果在保存任何項目期間發生錯誤,則所有先前的插入/更新都將被回滾。

一個非常簡單的例子,它顯示了這一點:下面的代碼將兩個項插入到表中,並創建一個重複的鍵錯誤場景。最終的結果是即使第二個插入被拒絕重複,表中也不會有行。

$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

+1

在此期間我們實現了事務處理,您可以在這裏閱讀:http://jaydata.org/blog/database-transaction-handling-in-jaydata –