首页 新闻 会员 周边

ado.net entity 事务 三层 SaveChange 问题(急啊)

0
悬赏园豆:50 [待解决问题]

我有一个操作在一张表中添加一个记录 然后取这个记录的ID 存放到另一张表中的一个字段中 这是一个完整的操作我在dal层是这样写的

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() 无分层  

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;
}
}

谢谢!

贤静丶喵喵的主页 贤静丶喵喵 | 初学一级 | 园豆:150
提问于:2011-03-28 22:27
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册