using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.Entity; using System.Data.Entity.Infrastructure; using System.Data.Common; namespace testEF事物 { class Program { static void Main(string[] args) { Pengbg_DataEntities db = new Pengbg_DataEntities(); DbConnection con = ((IObjectContextAdapter)db).ObjectContext.Connection; //DbConnection con = db.Database.Connection;我不明白这里为啥非要转换为ObjectContext con.Open(); using (var tran = con.BeginTransaction()) { //var r = tran.IsolationLevel; // IsolationLevel 的默认值是: ReadCommitted = 4096 在正在读取数据时保持共享锁,以避免脏读,但是在事务结束之前可以更改数据, //从而导致不可重复的读取或幻像数据。 try { db.Database.ExecuteSqlCommand(@"insert dbo.Sys_User VALUES ( N'1',N'2' ,'3' )"); db.Database.ExecuteSqlCommand(@"insert dbo.Sys_User VALUES ( N'1',N'2' ,'4' )"); db.Database.ExecuteSqlCommand(@"insert dbo.Sys_User VALUES ( N'1',N'2' )"); // 这里才是事务中的代码 tran.Commit(); } catch (Exception ex) { tran.Rollback(); } finally { db.Dispose(); con.Close(); } } con.Close(); } } }
DbContext 类继承了IObjectContextAdapter 接口,IObjectContextAdapter 接口 里面有一个只读的ObjectContext类对象。这里测试EF 是4.0 ,高版本也一样。6.0 引用 using System.Data.Entity.Core.Objects;