C#/.NET
我们正在尝试构建大批量订单记录系统.共有三个主要表:1. 订单2. 订单详情3. 订单发货 发货表包含每个订单的 n 条记录,任何记录发货条目都可以在客户接受订单之前更改,之后订单将被冻结.(业务需求) 虽然这在现实世界中可能不会发生......在我们的负载测试期间,我们收到 System.Data.Linq.ChangeConflictException 异常.在事务中完成提交也无济
..
如果我使用命令 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 然后在同一上下文中使用 EXEC storedProcedureName 执行存储过程,该存储过程是否会使用该事务之前声明的级别还是将使用默认级别? 如果我想强制每个存储过程在事务级别使用,我是否必须在代码顶部包含相同的语句(SET TRANSACTION ISOLATION L
..
正如 Eric Lippert 在 这篇文章,try/catch 子句中不允许yield return. 有没有一种很好的方法可以让我得到这样的东西,而不必手动编写自己的IEnumerator: public IEnumerable获取数据(){var 交易 = Session.BeginTransaction());尝试{IQuery q = CreateQuery(session);f
..
我正在 ADO.NET 中手动编写事务代码.我正在使用的示例重用了 SqlCommand,这看起来是个好主意. 但是,我在命令中添加了参数. 我的问题是:在下面的代码中,command.Parameters.Clear() 是否正确?还是我做错了? using (var connection = new SqlConnection(EomAppCommon.EomAppSetting
..
我需要在 SqlTransaction 的 finally 块中调用 dispose 吗?假设开发者没有在任何地方使用 USING,只是尝试/捕获. SqlTransaction sqlTrans = con.BeginTransaction();尝试{//做工作sqlTrans.Commit()}捕获(异常前){sqlTrans.Rollback();}最后{sqlTrans.Dispose(
..
我有 2 个在 Sql Server 数据库中读取和生成数据的作业.每隔一段时间,作业会因 System.Transactions.TransactionInDoubtException 而崩溃.确切的堆栈跟踪是: 未处理的异常:System.Transactions.TransactionInDoubtException:交易存在疑问.--->System.Data.SqlClient.Sq
..
我有一个新的 .NET 4.0 控制台应用程序,它使用: MySql 6.4.4.0 实体框架 4.2(代码优先) Visual Studio 2010 到目前为止,这是有效的.我可以很好地添加和读取数据库. 现在,当我添加 TransactionScope 时,如下例所示: public static void TestInsert(){使用 (TransactionSc
..
我一直使用 with 变量和赋值.现在我有这样一个 DbProviderConnection 类: 公共类 DbProviderConnection : IDisposable{公共 DbConnection 连接 { 获取;放;}公共 DbTransaction 事务 { 获取;放;}公共 DbTransaction BeginTransaction(){交易 = Connection.Beg
..
请看下面的代码.如果我初始化多个实体上下文,那么我会在 仅第二组代码 上得到以下异常.如果我注释掉第二组就可以了. {"底层提供程序在打开时失败."} 内部:{“与底层事务管理器的通信失败."} 内部:{“错误 HRESULT E_FAIL 已从对 COM 组件的调用返回."} 请注意,这是一个示例应用程序,我知道连续创建 2 个上下文没有意义.但是,生产代码确实有理由在同
..
我正在尝试使用新的 async/await 功能来异步处理数据库.由于某些请求可能很长,我希望能够取消它们.我遇到的问题是 TransactionScope 显然具有线程关联性,而且似乎在取消任务时,它的 Dispose() 在错误的线程上运行. 具体来说,当调用 .TestTx() 时,我在 task.Wait () 上得到以下 AggregateException 包含 InvalidO
..
我目前正在编写一个应用程序,该应用程序需要为我的业务实体进行多次插入、更新和删除操作.我使用 TransactionScope 类来保证所有存储过程都可以作为单个工作单元提交或回滚. 我的问题是,如果我在我的 .NET 类库中使用 TransactionScope 类,我还需要使用 COMMIT TRAN 和 ROLLBACK TRAN 是我的每个存储过程吗? 解决方案 2005 年
..
当 TransactionScope 首次出现时,我遇到了一些严重的问题,以使其在我的开发机器 (XP) 和我们的数据库服务器 (Windows Server 2003) 之间工作. 当我深入研究它时,这似乎是一个棘手且普遍的问题,有可能成为生产中的一个头疼问题,所以我决定不以这种方式处理事务(尽管我非常喜欢这种语法并且我真的很想让它工作). 这些问题是否仍然存在,或者使用起来是否安全
..
我需要持续监视数据库行以检查更改(更新).如果其他来源有一些更改或更新,则应在我的应用程序上触发事件(我使用的是 WCF).有没有办法连续监听数据库行的变化? 我可能有更多的事件来监视同一个表中的不同行.性能方面有什么问题吗?我正在使用 C# Web 服务来监控 SQL Server 后端. 解决方案 前段时间我也有过类似的需求,我用CLR SP将数据推送到消息队列中解决了.
..
我有一些代码的工作原理类似于 TransactionScope 的建议使用,但具有环境连接而不是环境事务. 有没有办法将 TransactionScope 对象与现有连接一起使用,或者 .Net 框架中是否有替代方案? 解决方案 其实只有一种方法. connection.EnlistTransaction(Transaction.Current) 它有效,如果没有必要,它不会将交
..
我想知道在处理多线程时如何以正确的方式使用 TransactionScope 类? 我们在主线程中创建了一个新的作用域,然后我们产生了几个工作线程,我们希望这些线程参与到主作用域中,例如,如果作用域从未完成,则在每个工作线程上调用回滚. 我在内部使用 ThreadStaticAttribute 阅读了有关 TransactionScope 的内容,这使得上述操作变得不可能/非常困难 -
..
我可以使用带有数据上下文的事务,以便在出错后回滚上下文的状态吗?如果是这样,它是如何工作的? 解决方案 我一直在测试中使用它们 :) 试试{dc.Connection.Open();dc.Transaction = dc.Connection.BeginTransaction();dc.SubmitChanges();}最后{dc.Transaction.Rollback();} 更新
..
我已经读到(或者可能从同事那里听说)在 .NET 中,TransactionScope 可以达到超时,然后是 VoteCommit(而不是 VoteRollback).这是准确的还是道听途说的?我无法在网络上找到有关此问题的信息(如果它是一个问题),所以我想知道是否有人对此有任何直接的经验并且可以提供一些启发? 解决方案 如果您的意思是与 SQL Server 相关,那么您可以在连接字符串
..
在 .NET 中使用 MongoDB 和 NoRM. 让我困惑的事情 - 没有交易 (不能只是告诉 MongoConnection.Begin/EndTransaction 或类似的东西. 我想使用工作单元模式并在出现故障时回滚更改. 是否还有一种干净的方法可以使用 ITransaction 丰富我的存储库? 解决方案 MongoDB 不支持复杂的多文档事务.如果这是您
..
string[] usersToAdd = new string[] { "asd", "asdert", "gasdff6" };使用(实体上下文 = 新实体()){foreach(usersToAdd 中的字符串用户){context.AddToUsers(new User { Name = user });}尝试{context.SaveChanges();//抛出异常:用户'gasdff6
..
当我发出“SaveChanges()"时,Entity Framework 中的默认事务隔离级别是什么?我在任何地方都找不到它.应该是“可序列化"吗? 解决方案 SaveChanges 使用当前存储提供程序的 DbTransaction 实现.这意味着默认事务隔离级别设置为数据库服务器的默认值.在 SQL Server 中,它是 READ COMMITTED.如果要更改隔离级别,可以使用
..