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;

posted @ 2015-06-04 14:27  pengbg  阅读(440)  评论(2编辑  收藏  举报