日期:2014-05-17  浏览次数:20425 次

如何在EF中做到事务的效果呢?
新手刚接触EF,先说下我的环境。
我的数据库SQL CE的,然后用了EF code first 方式生成的SQL CE数据库,再然后我这里面有个添加操作是涉及到多个表的,我想问下怎么才能做到SQLServer中事务的效果呢?
数据库 EF SQL?CE

------解决方案--------------------
使用代码描述数据库,可不简单,得把所有语法都学齐全了。

EF本身就自带事务,同一个上下文就行了。
------解决方案--------------------

DbConnection con = ((IObjectContextAdapter)ctx).ObjectContext.Connection;
con.Open();
using (var tran = con.BeginTransaction())
{
// 这里才是事务中的代码

tran.Commit();
}
con.Close(); 

------解决方案--------------------
using (CostManagementSystemEntities ent = new CostManagementSystemEntities())//在这个上下文里
{
tablename1 t1=new tablename1 ();//表1
tablename2 t2=new tablename2 ();//表2
ent.tablename1.AddObject(t1);
ent.tablename2.AddObject(t2);

ent.SaveChanges();
}

只有ent.SaveChanges()时表1和表2才会插入数据,而且如果其中一个插入失败另一个也不会插入,你想要的效果,就这么简单
------解决方案--------------------
就是保证事务中的 ObjectContext 是在一个地方new 出来的。

另外推荐用隐式事务:TranscationScope 这个对象。代码上网搜搜吧,很多