日期:2014-05-18  浏览次数:20872 次

关于架构的一个问题
数据库里有3个表,我在数据层(DAL层)里建3个类,一个类对应一个表,每个类负责进行对相应的表的读和写!但是有的时候一个操作可能要同时向两个表或者三个表里写入数据或读出数据!这样的话怎么解决!
不知道我说清楚了没有!不懂的话我再解释!
谢谢!


------解决方案--------------------
那你就把涉及到3个表的操作封装成一个类 不就OK了嘛...
------解决方案--------------------
友情帮顶~
------解决方案--------------------
一般情况是对 该类封装的这个表做操作 

操作无非就是增 删 查改

通常是用存储过程来实现

设计到多表的可以写个视图 然后用存储过程来处理视图
------解决方案--------------------
用视图啊。
如果对数据的操作不复杂的话就把那几个类一一实例化,然后分别操作也可以。
------解决方案--------------------
数据访问层是提供数据的,并不能要求以个类严格对应一个表。因为无可避免的要进行多表操作。。我们常常会把关联关系的对象封装在一起,比如果有个 学生表和成绩表,有时候我们需要读出一个学生的成绩。那我们可以在学生对象添加一个属性叫成绩。在DAL层把属性填充。总之,表和数据访问的类不是严格对应,不能说一个类仅仅只有操作一个表的职能。
------解决方案--------------------
用事务吧。如果三个表一起操作时,如果有一个表没有操作成功,就会回滚。反之就是都成功了。
我个人觉得这样比较保险点。
------解决方案--------------------
用事务或触发器来求得几个表的连动
------解决方案--------------------
其实像关于数据库的有些问题,你发布到数据库版块,也许会得到更想要的答案
------解决方案--------------------
探讨
数据访问层是提供数据的,并不能要求以个类严格对应一个表。因为无可避免的要进行多表操作。。我们常常会把关联关系的对象封装在一起,比如果有个 学生表和成绩表,有时候我们需要读出一个学生的成绩。那我们可以在学生对象添加一个属性叫成绩。在DAL层把属性填充。总之,表和数据访问的类不是严格对应,不能说一个类仅仅只有操作一个表的职能。

------解决方案--------------------

------解决方案--------------------
如果用ORM的话将同时操作几个表的这种操作做成存储过程。按顺序操作几个表的过程用事务。DAL层放个基类,里面有操作表的基本方法。
------解决方案--------------------
up
------解决方案--------------------
没搞明白,为什么一个表对应一个类?
------解决方案--------------------
可以在除定义这3个表对应的类外,再定义一个类来操作多个表啊!或者象7楼说的。

探讨
数据访问层是提供数据的,并不能要求以个类严格对应一个表。因为无可避免的要进行多表操作。。我们常常会把关联关系的对象封装在一起,比如果有个 学生表和成绩表,有时候我们需要读出一个学生的成绩。那我们可以在学生对象添加一个属性叫成绩。在DAL层把属性填充。总之,表和数据访问的类不是严格对应,不能说一个类仅仅只有操作一个表的职能。

------解决方案--------------------
DAL层负责单表的简单操作
再在之上建一个业务层或者随便哪个类似的名字,里面实现复杂的数据操作,通过DAL的组合来实现。当然如果是多个DAL操作,可能需要用事务。

------解决方案--------------------
发现10楼的朋友有天王的长像,天才的智商。。。不错不错。。。。。

其实要不要一个表对应一个类,这个应该跟据实际来吧,不过多表连动的话,最好使用事务去处理(相信这个谁都知道)。

有的时候其实上,一个操作对应一个类,会更容易一点。
------解决方案--------------------
数据库层只做单表操作.

多表操作.放到逻辑屋去处理.



------解决方案--------------------
顶,对象和范式表的冲突,学习。
------解决方案--------------------
把三個表建立成一個視圖就可以了
------解决方案--------------------
为什么不用事务控制呢?
------解决方案--------------------
查msdn.
------解决方案--------------------


MSDN上关于事务的例子,供参考
static void Main(string[] args)
{
try
{
//Create the transaction scope
using (TransactionScope scope = new TransactionScope())