gpt4 book ai didi

c# - 跨系统交易

转载 作者:太空宇宙 更新时间:2023-11-03 13:34:21 25 4
gpt4 key购买 nike

我可能在这里使用了错误的术语(如果有人知道它,我会喜欢它的正确名称)但我经常遇到想要将一些东西保存到数据库 + 其他东西的问题。在我当前的场景中,我有以下代码。

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 block 中 IsolatedStorage 中的任何图像:

catch (Exception ex)
{
db.Rollback();
foreach (Stock item in stock)
IsolatedStorage.Delete(item.Name);

throw;
}

但是我遇到这个问题很多次了,我不禁觉得一定有更好的方法。那么,当您想在事务中对数据库执行某些操作 + 执行其他操作时,是否有一些适用的模式?

最佳答案

如果您将 db.Commit(); 放在 foreach 循环之前,那么 Commit() 的任何错误都将被捕获 < strong>在 foreach 被执行之前。只有当 Commit() 成功时,foreach 循环才会运行。

关于c# - 跨系统交易,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19178296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com