/// <summary>
/// 使用SqlTransaction
/// </summary>
static void UsingExternalTransaction()
{
string value1Ofkey1 =
System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ToString();
using (var conn = new SqlConnection(value1Ofkey1))
{
conn.Open();
using (var sqlTxn = conn.BeginTransaction(System.Data.IsolationLevel.Snapshot))
{
try
{
var Id = new System.Data.SqlClient.SqlParameter("@Id",
System.Data.SqlDbType.Int, 0,
System.Data.ParameterDirection.Input,
0, 0, "Id",
System.Data.DataRowVersion.Current, false, null,
"", "", "");
Id.Value = 1;
var sqlCommand = new SqlCommand();
sqlCommand.Connection = conn;
sqlCommand.Transaction = sqlTxn;
sqlCommand.CommandText =
@"UPDATE Employee SET Name = 'helenhelen222'" +
" WHERE ID=@ID";
sqlCommand.Parameters.Add(Id);
sqlCommand.ExecuteNonQuery();
using (var context =
new EntFraContext(conn, contextOwnsConnection: false))
{
context.Database.UseTransaction(sqlTxn);//DbContext在此处使用跟Ado.Net方式一样的事务
var query = context.AccountSet.Where(p => p.Employee.Id == (int)Id.Value);
foreach (var item in query)
{
item.UserName += "abcdefg";
}
context.SaveChanges();
}
sqlTxn.Commit();
}
catch (Exception ex)
{
sqlTxn.Rollback();
}
}
}
}
转载:https://docs.microsoft.com/zh-cn/ef/ef6/saving/transactions