讨论事务问题!(发言者有分)

cgsw12345 2005-04-08 06:32:17
我在项目的领域逻辑层有两个类分别处理销售单和合同相关的功能,
但现在在表示层的一个函数里同时调用销售单类和合同类的方法,
只要两个成功才执行成功,有任何一个类的方法调用失败的话则都要
回滚,
实际就是ADO.NET中的基于连接的事务,但不同的是现在提升到领域逻辑层
所以无法使用基于连接的事务,相信使用面向对象方法做企业开发的都应
该碰到这个问题,不知大家是怎么解决的,大家可以讨论一下嘛!
有一种方法就是自己来实现事务类,但我觉得这样做不值得,要写非常多的代码
而且非常复杂,大家可以说说自己的想法!
看到思归大哥的blog中讲到,但不是很详细(可能是我比较菜)不太懂,
所以在此请教大家有没有什么好的方法.
...全文
253 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
flyingonnet 2005-04-11
  • 打赏
  • 举报
回复
saucer(思归) :
其实那个不是表示层, 是fascade 层, 他的base最上边是TransactionController
, this.dbTranscation 来自于那里。 这个fascade 层的功能就是联系多个逻辑类,即使10个逻辑类也是串连一起的,这样一个操作就是一个transaction,

saucer 2005-04-10
  • 打赏
  • 举报
回复
>>>this.dbTranscation???

在你事务层或表示层里调用跟数据库有关的ADO.NET的Transaction对象???
flyingonnet 2005-04-10
  • 打赏
  • 举报
回复
另外一种做法, 在我目前的项目中,表示层和逻辑层中间有一个fascade 层,姑且当成你的表示层。
这个层的重要目的就是可以调用多个逻辑类,这样每个逻辑类就只负责那一部分,因为在复杂的系统中,一个客户的操作要用到多个类的情况还是很常见的。

下边的代码就是让两个逻辑类加入一个事务。

public void UserOperation()
{

调用销售单类方法;//这里的方法只是对数据的处理,不包括存入数据库。
调用合同类的方法;//这里的方法也只是对数据的处理,不包括写入数据库。

this.BeginTransaciton(); //开始事务
销售单类.ShareTransaction(this.dbTranscation);
销售单类.Save();
合同类.ShareTransaction(this.dbtransaction);
合同类.Save();

最后,如果没有错误,就直接
this.CommitTransaction();
有错误就RollBack();
}

// 这样,你的两个类中的transaciton 是一个,所以达到你要的目的。
速马 2005-04-10
  • 打赏
  • 举报
回复
什么hotfix??
LoveCherry 2005-04-09
  • 打赏
  • 举报
回复
谢谢提醒
速马 2005-04-09
  • 打赏
  • 举报
回复
对了,思归给的代码里头,try语句块的最后似乎漏掉了ContextUtil.SetComplete();这句?
速马 2005-04-09
  • 打赏
  • 举报
回复
所以,要在.NET想做好架构设计,不掌握EnterpriseService/COM+还是不行地
COM+绝非过时的技术
(换句话说,.NET Remoting还有大量的需要完善的地方)
SweetRain 2005-04-09
  • 打赏
  • 举报
回复
思归大哥好猛!拜倒学习中......
saucer 2005-04-09
  • 打赏
  • 举报
回复
既然是总结,就要好好总结

你的第一个数据库存储过程的例子,假如你的数据库里已经有这样的数据

(1,'test')

然后执行

CREATE PROCEDURE Tran1
as
begin tran
Insert Into trantest (id,test)values(1,'test')
Insert Into trantest (id,test)values(2,'test')
if(@@error=0)
commit tran
else
rollback tran
GO

你觉得结果应该是什么?

其次是,考虑到很多人还在用WINDOWS 2000服务器,就不应该忽略ServicedComponent

而且,很明显,其实前面的2个例子跟楼主的提问无关

ServicedComponent的例子,参考MSDN上的文章

Transaction Control -- Building Distributed Applications with .NET
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/Bdadotnettransact1.asp
cgsw12345 2005-04-09
  • 打赏
  • 举报
回复
真的多谢各位的热心解答我关注.
我得去试试!成功后回来结贴.
LoveCherry 2005-04-09
  • 打赏
  • 举报
回复
小小总结了一下,希望对你有帮助
http://www.cnblogs.com/lovecherry/archive/2005/04/09/134535.html
pingnt 2005-04-09
  • 打赏
  • 举报
回复
学习....
LoveCherry 2005-04-09
  • 打赏
  • 举报
回复
再想问一句速马和思归,网上说的HotFix到底对2000和xp(sp1)有用吗?
saucer 2005-04-08
  • 打赏
  • 举报
回复
in windows 2000, use ServicedComponent, in Windows 2003, try



using System.EnterpriseServices;

ServiceConfig config = new ServiceConfig();

config.Transaction = TransactionOption.Required;

ServiceDomain.Enter(config);

try

{

调用销售单类方法;

调用合同类的方法;


}

catch(Exception e)

{

// we got an exception

Console.WriteLine(e.Message);

// so, we should abort the transaction

ContextUtil.SetAbort();

}

finally

{

ServiceDomain.Leave();

}


http://blogs.msdn.com/florinlazar/archive/2004/07/24/194199.aspx
gyf19 2005-04-08
  • 打赏
  • 举报
回复
接分,帮UP
zippro123 2005-04-08
  • 打赏
  • 举报
回复
JF
lgnet 2005-04-08
  • 打赏
  • 举报
回复
UP
fancyhsq 2005-04-08
  • 打赏
  • 举报
回复
我记得,.net里也有事务处理啊?直接用不行吗?
LoveCherry 2005-04-08
  • 打赏
  • 举报
回复
我现在的做法是在存储过程中进行牵套存储过程(事务)达到分层回滚的目的
LoveCherry 2005-04-08
  • 打赏
  • 举报
回复
看看这个帖子
http://community.csdn.net/Expert/topic/3555/3555161.xml?temp=.2073175
加载更多回复(6)

62,047

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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