我有一个场景,需要在从实体框架连接派生的事务范围内调用外部库。
外部库将消息写入由ef连接定义的数据库中的表。
该库的签名类似于:IMessageWriter GetMessageWriter(SqlConnection sqlConnectionObject)
在使用中,它看起来像:
using (var db = DBContextFactory.CreateDatabaseConnection())
{
var transaction = db.Database.BeginTransaction(IsolationLevel.ReadCommitted);
//Do some stuff
SqlConnection connection = (SqlConnection) (db.Database.Connection);
var msgWriter = _obf.GetMessageWriter(connection);
msgWriter.WriteToOutbox(record);
transaction.Commit();
}
问题是,在库内部,当它尝试访问数据库时,它会抛出错误: “Prepare要求命令在分配给命令的连接处于挂起的本地事务时具有事务。该命令的Transaction属性尚未初始化。”
注释掉交易行,导致错误: 准备需要一个开放且可用的连接。连接的当前状态已关闭。
有没有人知道如何使用事务进行EF连接,并获得将与事务一起执行的SQL连接?我想避免单独的连接和交易范围,如果可能的话。