我需要在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();
当我尝试使用事务时,上下文
无法识别对象ConnectionDbContext不包含'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; }
}
}
由于
答案 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();
}