gpt4 book ai didi

c# - .NET 事务范围选项

转载 作者:太空狗 更新时间:2023-10-29 19:44:34 24 4
gpt4 key购买 nike

我是 C# 的新手。所以我只是想知道是否有人可以帮助我弄清楚 C# 如何与 transactionscope 一起工作?因为我对它的定义有点困惑。但是,让我稍微解释一下我的问题。这样您就会了解我正在努力实现的目标。

我为三个不同的数据集声明了三个表适配器,如下所示:

logTableAdapter logAdap = new logTableAdapter();
measTableAdapter measAdap = new measTableAdapter();
valueTableAdapter valueAdap = new valueTableAdapter();

导入数据的过程是:

  1. 首先,我通过 logAdap.insert() 方法插入一个日志条目。
  2. 遍历 excel 文件以获取测量值并通过 measAdap.insert() 方法开始插入。
  3. 我正在通过 valueAdap.insert() 方法插入值的 Foreach 测量值。

所以我的问题是 - 因为度量和值(value)具有嵌套关系。我如何创建嵌套的事务范围以及当任何地方发生错误时(测量插入/值插入)我只想回滚我所做的一切。那就是我只想回到插入日志条目之前的点。

最佳答案

引用这篇恰当命名的文章:The definitive TableAdapters + Transactions blog post .

if you are working with plural operations inside one TransactionScope, i.e. “GetData” and “Update” both inside a single TransactionScope, or two Update’s within a TransactionScope, you will effectively open two SqlConnections to the single database, and thus unnecessarily promote the transaction from LTM to MSDTC. As a best practice, ALWAYS wrap only a singular operation inside a TransactionScope. Should you choose to wrap multiple operations inside a single TransactionScope, you must in that case manage connection lifetime yourself by extending the partial class definition. In other words, the following code will cause the transaction to promote –

using (TransactionScope tsc = new TransactionScope())
{
tableAdap.GetData() ;
//Do your transactional work.
tableAdap.Update() ;
tsc.Complete() ;
}

But the following code is just fine –

using (TransactionScope tsc = new TransactionScope())
{

tableAdap.OpenConnection() ;
tableAdap.GetData() ;

//Do your transactional work.
tableAdap.Update() ;
tableAdap.CloseConnection() ;
tsc.Complete() ;
}

因此您只需要一个 TransactionScope,但有一些注意事项。这是要点,但我鼓励您通读博文。

TableAdapter 不是最适合高完整性事务系统的数据访问方法。如果您需要更高的可靠性,您可能应该将您的操作编写为存储过程,并从您的 C# 代码中执行它。

关于c# - .NET 事务范围选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5147005/

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