繁体   English   中英

跨系统交易

[英]Cross system transactions

我在这里可能使用了错误的术语(如果有人知道,会喜欢使用专有名称),但是我经常遇到想要将某些内容保存到数据库中的问题。 在当前情况下,我有以下代码。

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;
}

但是我已经多次遇到这个问题,我不禁感到必须有更好的方法。 那么,当您想对事务中的数据库做某事+做其他事情时,是否有适用的模式?

如果放置db.Commit(); foreach循环之前,那么将在执行foreach 之前捕获与Commit()任何错误。 仅当Commit()成功时, foreach循环才会运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM