你可以这样做,给Add方法加一个参数Add(SqlTransaction transaction)
Add方法中的SqlConnection以如下方法获得。
SqlConnection connection=transaction.Connection你可以看一下Microsoft.ApplicationBlocks.Data,它就是这样通过事务操作数据的。
Add方法中的SqlConnection以如下方法获得。
SqlConnection connection=transaction.Connection你可以看一下Microsoft.ApplicationBlocks.Data,它就是这样通过事务操作数据的。
Add方法中的SqlConnection以如下方法获得。
SqlConnection connection=transaction.Connection你可以看一下Microsoft.ApplicationBlocks.Data,它就是这样通过事务操作数据的。
还有,我提个建议
其实那类A和B来说,并没有形成一个业务实体
建议用一个类C来描述这个实体
C中包括
private A a;//表头信息
private arrayList bList;//详细信息列表比如说方法
Add()
{
//开始事务
调用a.Add(事务参数);
foreach(B b in bList)
{
b.Add(事务参数);
}
//提交事务
}
B类继承A后,B拥有A的全部属性,这样我就可以将B绑定到控件上了。
比如电梯是父类A,客用电梯是子类B,B类中有很多属性是A类的属性。这样B类就可以少做很多事了。
所以B类里的属性+A类里的属性=B业务实体
可以如下来做,如果一定要用类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
“A和B是形成一个业务实体”
这句话我不赞同
类B继承了A,表示B是A的一个更详细的说明,并没有和A构成一个业务实体
更严格的说一点,有了B,就无需有A了
所以插入数据的时候没有必要用事务来包含A(当然B内部可以用自己的事务)
然后在A的Add里面调用这个属性就可以了
Add()
{
//开始事务
调用a.Add(事务参数);
foreach(B b in bList)
{
b.Add(事务参数);
}
//提交事务
}
另外如果有个类C继承B,那么你在A类中的判断if(t.ToString() == "xxxx.xxxx.B")好像就不成立了。
你从B的角度看他是一个完整的电梯对象,但它也是一个设备不是吗,所以他有父类设备(A)的全部属性。
希望继续回帖