我可能在这里使用了错误的术语(如果有人知道,我会喜欢正确的名称)但我经常遇到想要将某些内容保存到数据库+其他内容的问题。在我目前的情况下,我有以下代码。
public class Stock
{
public Guid StockID { get; set; }
public string Name { get; set; }
public byte[] Image { get; set; }
}
IEnumerable<Stock> stock = new StockService().Get();
using (Database db = DBFactory.Create())
{
try
{
db.BeginTransaction();
db.InsertAll(stock);
foreach (Stock item in stock)
IsolatedStorage.SaveFile(item.Name, item.Image);
db.Commit();
}
catch
{
db.Rollback();
throw;
}
}
正如您所希望的那样,我正在做的是将某些内容保存到数据库(在我的情况下为 Sqlite)和 Windows Phone 设备上的 IsolatedStorage 中。
现在,如果上面显示的代码失败,它显然会导致IsolatedStorage
不一致的状态。我可以修改此代码并从 catch 块中的 IsolatedStorage 中删除任何图像,如下所示:
catch (Exception ex)
{
db.Rollback();
foreach (Stock item in stock)
IsolatedStorage.Delete(item.Name);
throw;
}
但是我已经多次遇到这个问题,我不禁觉得必须有更好的方法。那么,当您想在事务中对数据库执行某些操作 + 执行其他操作时,是否有一些适用的模式?