DbContext不包含' Connection'的定义。使用事务实体框架的错误

时间:2013-10-11 14:55:17

标签: entity-framework asp.net-mvc-4 transactions connection

我需要在MVC4项目的控制器中使用Entity Framewok(版本5)中的事务。 这是因为我要在同一个事务中的不同表中保存数据,避免数据不一致。

using System;
using System.Collections.Generic;
using System.Linq;    using System.Web.Mvc;
using System.IO;
using System.Web.UI.WebControls;
using System.Web.UI;
using System.Data;
using System.Data.Objects;

 private DBcontextName context = new DBcontextName ();

 context.Connection.Open();

当我尝试使用事务时,上下文

无法识别对象Connection

DbContext不包含'Connection'的定义,也没有扩展方法'Connection'接受类型的第一个参数...

我不明白这是什么问题, 你可以帮帮我吗?

namespace NameSpaceName    {
    using System;
    using System.Data.Entity;
    using System.Data.Entity.Infrastructure;
    using System.Data.Objects;
    using System.Data.Objects.DataClasses;
    using System.Linq;

    public partial class DBcontextName : DbContext
    {
        public DBcontextName ()
            : base("name=DBcontextName ")
        {
        }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            throw new UnintentionalCodeFirstException();
        }

        public DbSet......{ get; set; }
        public DbSet......{ get; set; }

               }
}

由于

1 个答案:

答案 0 :(得分:2)

试试这样:

using (TransactionScope scope = new TransactionScope())
{
    using (DBcontextName context = new DBcontextName()
    {
        SqlConnection connection = (SqlConnection)((EntityConnection)context.ObjectContext.Connection).StoreConnection;

            using (SqlCommand command = storeConnection.CreateCommand())
            {
                command.Connection = connection ;
                connection.Open();

                command.CommandText = yourStoredProcedureName;
                command.CommandType = CommandType.StoredProcedure;
                command.Parameters.AddRange(yourSqlParameters);

                using (DbDataReader reader = command.ExecuteReader())
                {
                    // Do stuff
                }
            }
    }
    scope.Complete();
}

如果您正在调用存储过程,则只需执行此操作(对于具有多个记录的速度,您可以使用一个表值参数来保存记录列表)。如果您只想使用实体框架,可以这样做:

using (TransactionScope scope = new TransactionScope())
{
    using (DBcontextName context = new DBcontextName()
    {
        // Get objects, delete objects, add objects, etc.
        // Or add new objects
        context.SaveChanges();
    }
    scope.Complete();
}