关于TransactionScope的应用问题

hugo12345 2010-09-29 04:04:06
该类将代码块当做一个事务来执行,如果执行该对象的Complete方法事务提交,否则则事务回滚。查看一下代码:

using (TransactionScope scope = new TransactionScope())
{
ChangeXML("1", "10");
ChangeXML("2", "20");
//scope.Complete();
}

private static void ChangeXML(string id,string scan)
{
XElement xe = XElement.Load("d://news.xml");
xe.Elements().Single(c => c.Attribute("id").Value == id).Element("Scan").SetValue(scan);
xe.Save("d://news.xml");
}

XML如下:

<?xml version="1.0" encoding="utf-8"?>
<root>
<item id="1">
<Date>2010-09-29</Date>
<Title>啊啊啊啊</Title>
<Scan>1</Scan>
<Context>aaaaaaaaaaaaaaaaaaaaaaaaaa</Context>
</item>
<item id="2">
<Date>2010-09-29</Date>
<Title>啊啊啊啊</Title>
<Scan>2</Scan>
<Context>aaaaaaaaaaaaaaaaaaaaaaaaaa</Context>
</item>
<item id="3">
<Date>2010-09-29</Date>
<Title>啊啊啊啊</Title>
<Scan>3</Scan>
<Context>aaaaaaaaaaaaaaaaaaaaaaaaaa</Context>
</item>
</root>

照理说scope我没有执行Complete方法。事务就不会被提交。但为什么XML却任然被更改了?
...全文
65 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
hugo12345 2010-09-29
  • 打赏
  • 举报
回复
哦。如果我需要对io也创建事务,那我怎么做呢? IO 是否也有类似的类?
ajq1989 2010-09-29
  • 打赏
  • 举报
回复
http://www.cnblogs.com/zhahost/archive/2010/06/18/1759983.html

操作数据库才有事务 ,
io文件流没有事务。方法已经被执行。回滚不了了。
hugo12345 2010-09-29
  • 打赏
  • 举报
回复
4楼什么意思?我哪里理解有误?我该怎么改?
51Crack 2010-09-29
  • 打赏
  • 举报
回复
你当TransactionScope是万能的啊
hugo12345 2010-09-29
  • 打赏
  • 举报
回复
这个和操不操作XML有关系吗?按照我的理解在将此代码块上创建事务。然后以事务的形式来执行代码。既然是事务,我没提交为什么却执行了?
2楼的说法回滚需要自己写?不可能吧
lhzyn 2010-09-29
  • 打赏
  • 举报
回复
这个,Rollback你要自己写
ajq1989 2010-09-29
  • 打赏
  • 举报
回复
分布式事务
没见过操作xml的哦。

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧