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;
}
}
谢谢!
------解决方案--------------------最好还是用触发器来实现比较好
------解决方案--------------------