Tag: 交易

DocumentDb在transactioncope中写入

我正在尝试使用DocumentDb写作交易的一部分,如下所示 – using (var scope = new TransactionScope) { //first transaction //write to document db //third transaction } 我观察到如果第三个事务失败,则不会回滚documentDb write,我仍然会在集合中看到该文档。 第一个事务(在这种情况下为NEventStore)完美回滚。 有谁知道DocumentDb是否支持TrnasactionScope。 如果我有嵌套交易怎么办? 谢谢! 编辑:所以看起来DocumentDb不支持TransactionScope,它对它们一无所知。 有没有办法让DocumentDb事务成为C#外部事务的一部分? 有没有人遇到过此用例? 编辑2:按照建议在此处跟进问题和答案

PetaPoco – 设置事务隔离级别

使用PetaPoco,您可以进行事务管理,执行以下操作: var newObject = new NewObject(); var newObjectId = 1; using (var scope = db.GetTransaction()) { newObject = db.SingleOrDefault(“SELECT * FROM tblNewObject WHERE Id = @0”, newObjectId); scope.Complete(); } 虽然这对于管理事务更新时的管理非常有用,但是控制事务的隔离级别与使用传统SQL连接执行此操作的方式类似: TransactionOptions transOptions = new TransactionOptions() { IsolationLevel = IsolationLevel.ReadUncommitted }; using (new TransactionScope(TransactionScopeOption.Required, transOptions)) { //here be transactions } 在PetaPoco中, GetTransaction返回一个新的Transaction,使用该特定的构造函数调用BeginTransaction 。 在这种情况下,BeginTransaction使用.NET的IDbConnection.BeginTransaction() – 它具有提供事务隔离级别的重载。 […]

类型或命名空间名称“事务”在命名空间“系统”中不存在

这是一个ASP.Net Web应用程序,使用Visual Studio 2013.该解决方案由几个项目组成。 我在using System.Transactions的库项目中有代码,并且它运行了好几个月。 今天我在Web应用程序项目的代码中using System.Transactions添加了相同的内容,但它失败并显示以下错误消息: The type or namespace name ‘Transactions’ does not exist in the namespace ‘System’ 以下是我尝试过的一些事情: 添加了对System.Transactions的引用。 validation两个项目中引用的dll文件是否相同。 将框架从4更改为4.5并返回。 validation所有项目都使用相同的框架版本。 清理并重建解决方案。 退出Visual Studio,删除AppData> Local> Temp中的所有文件,重建。 重启电脑。 因此,结果是using System.Transactions在一个项目中工作正常但在另一个项目中工作正常,即使两个项目都在同一个解决方案中。 有什么建议? 编辑:这是一个奇怪的可能没有任何额外的帮助,但这里是: 当我构建项目时,没有错误。 也就是说, using System.Transactions编译就好了。 如果我运行应用程序,它会弹出炸弹并且错误会出现在浏览器窗口中。 VS代码窗口仍然没有显示错误。 如果我编辑using System.Transactions或添加类似var x = System…代码,则错误会立即出现在using System.Transactions 。 **编辑:**此问题被标记为重复。 事实并非如此 – 建议的副本通过浏览参考来解决问题。 我已经尝试过了,但没有用。 在我的情况下,我不得不使用“复制本地”选项。

Nhibernate事务锁定了一个表格

我开发了一个使用nHibernate的WCF api。 我是新来的。 我使用session.update来处理事务。 我有一个for循环,其中基于选择条件我正在更新记录即。 如果tabel1中存在A,那么我正在更新表,否则插入新条目。 我收到“无法执行查询”。 尝试通过在表中添加新条目来对先前正在更新的表执行选择查询时。 我的想法是,因为我使用session.save(table1),然后尝试从该表中选择条目,我收到一个错误。 由于session.save临时锁定表,我无法在该表上执行select查询。 对此有什么解决方案? 更新 :这个for循环我用来检查数据库中的某些字段: using (ITransaction tranx = session.BeginTransaction()) { savefunction(); tranx.Commit(); } 保存function: public void savefunction() { for (int i = 0; i < dictionary.Count; i++) { ICandidateAttachmentManager candidateAttach = new ManagerFactory().GetCandidateAttachmentManager(); CandidateAttachment attach = new CandidateAttachment(); attach = checkCV(); if(attach == null) { //insert […]

事务在提交并且连接关闭后是否可以回滚?

事务在提交并且连接关闭后是否可以回滚? finally { // Commit the transaction. sqlTran.Commit(); reader.Close(); reader.Dispose(); conn.Close(); conn.Dispose(); } 我想给用户一个Opps选项! 滚回去 。 所以如果它被提交可以回滚吗?

如何在内存中进行事务处理?

我对使用事务RDBMS非常熟悉,但是如果事务失败,我如何确保对内存中数据所做的更改被回滚? 如果我甚至不使用数据库怎么办? 这是一个人为的例子: public void TransactionalMethod() { var items = GetListOfItems(); foreach (var item in items) { MethodThatMayThrowException(item); item.Processed = true; } } 在我的示例中,我可能希望以某种方式回滚对列表中项目所做的更改,但是如何实现此目的呢? 我知道“软件事务记忆”,但对它知之甚少,似乎相当实验性。 我也知道“可补偿交易”的概念,但这会产生编写执行/撤销代码的开销。 Subversion似乎通过让你运行“cleanup”命令来处理更新工作副本的错误。 有任何想法吗? 更新: Reed Copsey提供了一个很好的答案 ,包括: 处理数据副本,在提交时更新原始数据。 这使我的问题更进一步 – 如果在提交期间发生错误怎么办? 我们经常将提交视为即时操作,但实际上它可能会对大量数据进行许多更改。 如果在应用提交时存在不可避免的事情,例如OutOfMemoryException会发生什么? 另一方面,如果有人选择回滚选项,如果在回滚期间出现exception会发生什么? 我理解像Oracle RDBMS这样的东西有回滚段和UNDO日志和东西的概念,但假设没有序列化到磁盘(如果它没有序列化到磁盘,它没有发生,崩溃意味着你可以调查这些日志并从中恢复),这真的可能吗? 更新2: Alex的回答提出了一个很好的建议:即更新一个不同的对象,然后,提交阶段只是将对当前对象的引用更改为新对象。 他进一步建议你改变的对象实际上是修改对象的列表。 我明白他在说什么(我想),我想让问题更复杂: 在这种情况下,你如何处理锁定? 想象一下,你有一个客户列表: var customers = new Dictionary(); 现在,您想要对其中一些客户进行更改,如何在不锁定和替换整个列表的情况下应用这些更改? 例如: var […]

无法使用NHibernate登记分布式事务

我在unit testing中看到一个问题,其中Oracle被抛出exception,消息“无法在分布式事务中登记”。 我们正在使用ODP.net和NHibernate。 在嵌套事务中对数据库进行一定数量的提交后,问题就出现了。 令人讨厌的是,这在连续集成服务器(Windows Server 2003 R2 SP1)上失败了,而不是在我的开发机器(XP SP2)上。 这是该问题的一个小问题: using (new TransactionScope()) { for (int j = 0; j < 15; j++) { using (var transactionScope = new TransactionScope(TransactionScopeOption.Required)) using (var session = sessionFactory.OpenSession()) { for (int i = 0; i < 200; i++) { var obj = [create new NHibernate mapped obj] […]

Nhibernate session.BeginTransaction()与transaction.Begin()

我的问题与使用nhibernate事务有关 transaction.Begin()下面是一个问题吗? 还是多余的? using (var transaction = session.BeginTransaction()) { transaction.Begin(); action(); transaction.Commit(); }

如何从Amibroker持续导出数据

需要测试用于日间交易的algotrading工具。 为了从NSE获取日内实时数据,一些供应商正在为Amibroker销售数据插件。 为了从Amibroker中获取数据,我打算使用AFL (Amibroker Formula Language)。 AFL的以下代码为每个符号创建一次.csv文件。 但是为了使用实时数据,我需要在一天中连续地将传入数据附加到.csv文件中。 如何在不崩溃/超载Amibroker的情况下完成这项工作? // created a directory on your C drive named AmiBroker data backup dayhours = paramtoggle(“Day hours only”, “No|Yes”); fmkdir(“c:\\AmiBackup\\”); setbarsrequired(100000,100000); lname = Name(); // gets the name of the symbol // note: if you have names with invalid characters like / you must rename the file […]

如何在Entity Framework Core中实现环境事务?

我需要在两个模型下实现事务(使用两个分离的有界上下文)。 所以这样的代码: using (TransactionScope scope = new TransactionScope()) { //Operation 1 using(var context1 = new Context1()) { context1.Add(someCollection1); context1.SaveChanges(); } //Operation 2 using(var context2 = new Context2()) { context2.Add(someCollection2); context2.SaveChanges(); } scope.Complete(); } 返回exception: 已检测到环境事务。 entity framework核心不支持环境事务。 请参阅http://go.microsoft.com/fwlink/?LinkId=800142 在Link中,他们建议在两个上下文中使用一个连接。 并使用context2来使用context1的块。 但如果我为每个型号使用自己的控制器/服务: using (TransactionScope scope = new TransactionScope()) { service1.DoWork(); service2.DoWork(); scope.Complete(); } 我该如何实现呢? 在方法中添加连接作为参数 – […]