使用实体框架中的SQLConnection对象

时间:2015-05-04 18:55:08

标签: c# entity-framework ado.net

我有一个场景,需要在从实体框架连接派生的事务范围内调用外部库。

外部库将消息写入由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连接?我想避免单独的连接和交易范围,如果可能的话。

0 个答案:

没有答案