EF 事物

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;

你可能感兴趣的:(事物)