读书人

ado.net entity 事务 三层 SaveChange

发布时间: 2012-02-27 10:00:22 作者: rapoo

ado.net entity 事务 三层 SaveChange 问题
我有一个操作
在一张表中添加一个记录 然后取这个记录的ID 存放到另一张表中的一个字段中 这是一个完整的操作
我在dal层是这样写的

C# code
public bool AddOpinion(ref Opinion addOpinion)        {            using(ResidentialPropertyMSEntities rpms=new ResidentialPropertyMSEntities())            {                try                {                    rpms.AddToOpinions(addOpinion);                    rpms.SaveChanges();                }                catch (Exception)                {                    return false;                }                return true;            }        }


还有一个操作就是把另一张表中的字段值改成addOpinion里的OpinionID的值

我并不是很想共享ObjectContext 总觉得这是不应该出现在BLL层的东西 但是我需要用它的连接才能使用事务 而这个事务却又需要写在BLL层 另外 我并不是很想用存储过程来把这个事务封装 还有什么好的办法能实现事务么?

顺带问一下SaveChanges()的细节 刚上msdn看了一下文档 说的是 "SaveChanges 在事务内进行操作。 SaveChanges 将回滚该事务" 但是我曾经遇到过一个问题: 用一个sqlserver的事务写一个添加记录(ID是自增长型的) 然后再修改另一张表的数据时,此id是取不到的 类似于 "insert一条记录 select此记录ID update另一张表中的数据"这一组操作 而这里用ado.net entity的SaveChanges()是不存在这个问题的 代码是:

这是一个订单主从表操作
先添加主表 然后再添加从表 添加从表时要取主表的ID 最后SaveChanges() 无分层
C# code
public bool InsertOrder(OrderPri insertOrderPri,List<OrderDetail> insertOrderDetail)        {            try            {                smse = new SuperMarketSystemEntities();                smse.AddToOrderPris(insertOrderPri);                foreach (var q in insertOrderDetail)                {                    q.OrderPriID = insertOrderPri.OrderPriID;                    smse.AddToOrderDetails(q);                }                smse.SaveChanges();                return true;            }            catch            {                return false;            }        }



谢谢!

[解决办法]
最好还是用触发器来实现比较好
[解决办法]
探讨
引用:

最好还是用触发器来实现比较好

呃 那后一个例子怎么实现好?

读书人网 >.NET

热点推荐