using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.ComponentModel.DataAnnotations;
using System.Data.Entity;
namespace SqlEFTester {
class Program {
static void Main(string[] args) {
ConnectionManager connectionManager = new ConnectionManager();
SqlConnection conn = connectionManager.Connection;
conn.Open();
//BEGIN TRAN
SqlTransaction tran = conn.BeginTransaction();
//Will do some legacy work using SqlTransaction, so can not use TransactionScope here.
MyContext context = new MyContext(conn);
List<Inventory> list = context.Inventories.Take(10).ToList();//Just get top 10 Inventories
//COMIT TRAN
tran.Commit();
Console.WriteLine("Done...");
Console.ReadLine();
}
}
class ConnectionManager {
public SqlConnection Connection {
get {
return new SqlConnection("Data Source=MYSERVER;Initial Catalog=MYDATABASE;Integrated Security=SSPI;");
}
}
}
[Table("Inventory")]
class Inventory {
[Key]
public int InventoryId { get; set; }
}
class MyContext : DbContext {
public EmutContext(SqlConnection conn)
: base(conn, false) {
//I have to close it, otherwise it will say "EntityConnection can only be constructed with a closed DbConnection."
base.Database.Connection.Close();
}
public DbSet<Inventory> Inventories { get; set; }
}
Я пытаюсь выполнить код EF внутри традиционного ADO.NET SqlTransaction
.
Я открываю соединение и передаю то же соединение в EF, чтобы повторно использовать соединение.По замыслу я должен закрыть соединение, так как его жалоба
EntityConnection может быть создана только с закрытым DbConnection.
Если я запускаю выше кода, я получил
Транзакция завершена.
Я не могу зафиксировать.ПРИМЕЧАНИЕ. Я не могу использовать TransactionScope
из-за устаревшей структуры кода, которую мы используем.