社区
C#
帖子详情
面向对象开发中的事务问题。非常之急。
WindowsBoy
2004-04-20 04:10:14
在论坛中找了一下,但没有找到,请各位来解决一下。
在面向对象的程序设计中一两个类A和B,A是父类,B是A的子类,A和B都有一个Add方法用来向数据库中的两个表(A和B表)添加记录。在B类的Add方法中调用Base.Add("参数列表")然后在调用数据访问层的方法向B表插入数据。因为A和B是形成一个业务实体所以必需做事务的处理。
不使用COM+和传connection参数的方法。
不知道我说明白了没有。100分不够就在加100分。
...全文
231
19
打赏
收藏
面向对象开发中的事务问题。非常之急。
在论坛中找了一下,但没有找到,请各位来解决一下。 在面向对象的程序设计中一两个类A和B,A是父类,B是A的子类,A和B都有一个Add方法用来向数据库中的两个表(A和B表)添加记录。在B类的Add方法中调用Base.Add("参数列表")然后在调用数据访问层的方法向B表插入数据。因为A和B是形成一个业务实体所以必需做事务的处理。 不使用COM+和传connection参数的方法。 不知道我说明白了没有。100分不够就在加100分。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
19 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
WindowsBoy
2004-04-23
打赏
举报
回复
我明白了brightheroes(闭关)的意思了。不过现在这个项目已经开始,没有时间试了,我还是采用最笨的方法吧。
另外如果有个类C继承B,那么你在A类中的判断if(t.ToString() == "xxxx.xxxx.B")好像就不成立了。
你从B的角度看他是一个完整的电梯对象,但它也是一个设备不是吗,所以他有父类设备(A)的全部属性。
希望继续回帖
WindowsBoy
2004-04-22
打赏
举报
回复
TO: brightheroes(闭关)
B类继承A后,B拥有A的全部属性,这样我就可以将B绑定到控件上了。
比如电梯是父类A,客用电梯是子类B,B类中有很多属性是A类的属性。这样B类就可以少做很多事了。
所以B类里的属性+A类里的属性=B业务实体
changezhong
2004-04-22
打赏
举报
回复
To brightheroes(闭关) :能不能给一个具体一点的例子
Add()
{
//开始事务
调用a.Add(事务参数);
foreach(B b in bList)
{
b.Add(事务参数);
}
//提交事务
}
brightheroes
2004-04-22
打赏
举报
回复
你可以在类A中定义一个属性SqlString
然后在A的Add里面调用这个属性就可以了
brightheroes
2004-04-22
打赏
举报
回复
换句话来说
“A和B是形成一个业务实体”
这句话我不赞同
类B继承了A,表示B是A的一个更详细的说明,并没有和A构成一个业务实体
更严格的说一点,有了B,就无需有A了
所以插入数据的时候没有必要用事务来包含A(当然B内部可以用自己的事务)
brightheroes
2004-04-22
打赏
举报
回复
我觉得,类B和A不应该是父子关系,他们反映在数据库中是主从表,反映在C#里面是两个平等的类,应该用另外的一个类C来描述他们的关系。
brightheroes
2004-04-22
打赏
举报
回复
我明白你的意思了,ok
可以如下来做,如果一定要用类B来继承A,而不是用另外一个类C来包装没有继承关系的A和B的话(我还是推荐这种做法)
--声明,以下的方法比较诡异,但是的确是一个方法;
你可以在A中做一个方法,这个方法就是Add
然后在Add方法里面通过反射来作,当然这样就略显无奈。
比如说你的类B中,有一个属性,叫做InsertSql,返回insert字符串(这个没有问题吧,甚至你这个Sql语句都可以生成,但是我们先简单的就事论事)
Add()
{
Type t = this.GetType();//通过这句话可以得到当前的类型
if(t.ToString() == "xxxx.xxxx.B")//xxxx表示你的命名空间
{
string sql = t.GetProperty("InsertSql").GetValue(null,null);
}
。。。。。。
}
大概是这么个意思,这是一个思路
调用的时候
因为你的B继承了A,所以B中也有了Add这个方法
B.Add()
就可以了
不知道你有没有明白,大概我说的不是很清楚
总之,在执行B.Add()的时候
Type t = this.GetType()得到是B
北京的雾霾天
2004-04-22
打赏
举报
回复
面向对象开发中的事务问题,真是一个不好处理的问题,要是把一个事务对象传来传去的,不是一个好的办法,又要保证类的特性,实在不行的话不把这个ADD方法做成一个在子类中重写的,让子类自己来处理这个动作.
生活真美好
2004-04-21
打赏
举报
回复
gz
WindowsBoy
2004-04-21
打赏
举报
回复
还有没有其它的办法呀!我不想用这种方法,也不想用COM+。最后如果不行只有用这个方法了,希望各位在想想办法。我在等一天,明天结帖。
CMIC
2004-04-21
打赏
举报
回复
你可以这样做,给Add方法加一个参数Add(SqlTransaction transaction)
Add方法中的SqlConnection以如下方法获得。
SqlConnection connection=transaction.Connection
你可以看一下Microsoft.ApplicationBlocks.Data,它就是这样通过事务操作数据的。
CMIC
2004-04-21
打赏
举报
回复
你可以这样做,给Add方法加一个参数Add(SqlTransaction transaction)
Add方法中的SqlConnection以如下方法获得。
SqlConnection connection=transaction.Connection
你可以看一下Microsoft.ApplicationBlocks.Data,它就是这样通过事务操作数据的。
WindowsBoy
2004-04-21
打赏
举报
回复
在UP
brightheroes
2004-04-21
打赏
举报
回复
不太明白为什么楼主不想采纳 CMIC(大象)的方法,很标准的方法呀这是
还有,我提个建议
其实那类A和B来说,并没有形成一个业务实体
建议用一个类C来描述这个实体
C中包括
private A a;//表头信息
private arrayList bList;//详细信息列表
比如说方法
Add()
{
//开始事务
调用a.Add(事务参数);
foreach(B b in bList)
{
b.Add(事务参数);
}
//提交事务
}
WindowsBoy
2004-04-21
打赏
举报
回复
自己在UP一下
WindowsBoy
2004-04-20
打赏
举报
回复
是的。而这两次不是事先知道的。因为随着系统的扩展,其子类也可能在增加。所以也不一定是两次数据访问,可能更多。
北京的雾霾天
2004-04-20
打赏
举报
回复
你的情况是用到了两次数据访问层的函数,这次操作还必需是在一个事务里面是吧?
WindowsBoy
2004-04-20
打赏
举报
回复
自己UP一下
Hexudong1979
2004-04-20
打赏
举报
回复
up
Hibernate
开发
中
文教程
Hibernate
开发
中
文教程.pdf Hibernate
开发
中
文教程 对象关系数据库 映射
Hibernate
开发
指南
hibernate
开发
指南:hibernate映射;hibernate in spinrg;jdbc
事务
管理;数据关联;hibernate query language;
rock-0.9开源框架
rock框架是本人
开发
的一个开源框架。 rock框架的核心主要是rock-dbutils,rock-dbutils是一个轻量级的ORM框架,对jdbc进行了浅层次的封装。是本人在教学和项目
开发
中
慢慢积累
开发
而成,用来代替烦人的复杂的hibernate的。使用rock框架
开发
应用非常简单,可以和spring整合
开发
。 rock框架特点: 1 不需要编写表映射xml文件 2 支持ID自动生成 3 推荐使用qbc方式编程,不需要编写sql。 4 不支持HQL之类的查询语言,对于复杂查询任务,直接使用sql语言,操作简单,可直接返回对象数据。 5 对于复杂查询任务,sql语句也可以直接放在spring的配置文件
中
,直接注入到DAO
中
。 6 不支持对象之间的关联。 7 不支持缓存(觉得没必要) 8 利用数据库本身功能支持数据分页 9 使用数据库方言支持不同的数据库 10 暂不支持aop
事务
11 即使是最纯粹的sql编程,也是1行代码的事 使用hibernate很烦人的地方最主要有两点: 1 不使用sql,搞个hql。其实程序员还是写sql舒服。 2 为了
面向对象
而
面向对象
,搞得太复杂,效率又低,
面向对象
的好处都被其副作用抵消了。 所以,基于以上两点,rock框架采取的是半
面向对象
半关系封装方式。要么不写sql,要么写就写最纯正的sql。 如果大家感兴趣,就下载试用一下下,里面有源代码、文档、例子。如果有什么意见尽管提。 就是本人平常自己写自己用的小玩意,今天高兴拿出来共享,别上升到国人
开发
什么什么的高度,谁要是这么捧杀我或棒杀我,我跟谁急。 联系我:mex2000@163.com 梦湘工作室 王昆山
J2EE系统之-hibernate学习总结
对象持久化理论: 什么是对象持久化:把对象里面的数据转存到外部的持久存储设备
中
(如数据库、磁盘等) 为什么要对象持久化: 1、内存断电后,数据就会消失 2、需要共享数据 3、内存空间有限 4、使数据格式,便于管理和查询 对象持久化的途径: 1、对象序列化:不适合大量数据操作 2、关系型数据库 企业计算的需求: 1、海量数据的存储 2、大规模的查询,报表 3、稳固的数据完整性、一致性、安全性的保存
Hibernate_day04.zip
hibernte学习第四天代码,Hibernate的查询方式和抓取策略
C#
111,096
社区成员
642,554
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章