2011-06-15 140 views
2

我說我有以下三種方法:實體框架和交易範圍

DeleteProduct(int productId); 
DeleteProductAttributes(int productId); 
DeleteProductManufacturers(int productId); 

我也有一個全局對象範圍內調用它_context(類內)。 我希望每個這些方法都可以自己工作,因爲我需要在其他地方使用它們。但是,在刪除產品方法中,我希望能夠使用事務範圍,以防萬一發生故障,並且我得到一個沒有屬性或製造商的產品。所以我DeleteProduct方法看起來像這樣的時刻

public void DeleteProduct(int productId) 
{ 
    if (productId == 0) 
     return; 
    Product product = GetProductById(productId); 
    DeleteProductAttributes(productId); 
    DeleteProductManufacturers(productId); 
    _context.Products.DeleteObject(product); 
} 

沒有人有任何見解,我怎麼能做到這一點,而不破壞我上面的結構?

任何幫助非常感謝。

感謝

回答

3

如果所有三種方法使用存儲在_context場同樣的背景下那麼他們已經在交易。所有數據修改(包括刪除)僅在上下文中標記,並且只有在致電SaveChanges時纔在數據庫中執行。 SaveChanges始終在交易中進行所有修改。

+0

*這三種方法都使用相同的上下文。 *所有這三種方法都調用savechanges()。 *我將發佈所有三種方法的正確代碼 – Peuge 2011-06-16 00:11:20

+0

抱歉無法編輯上述評論。你是說如果我運行上述方法並且DeleteProductManufacturers失敗,那麼DeleteProductAttributes將被回滾? – Peuge 2011-06-16 00:20:18

+0

如果他們使用單個'SaveChanges',那麼他們將全部回滾。 – 2011-06-16 06:19:02