RAISERROR的时间在实体框架ExecuteSqlCommand中返回?

时间:2018-03-06 00:27:21

标签: sql-server entity-framework-6

我继承了使用Entity Framework进入新应用程序的长时间运行的存储过程。存储过程通过使用

显示运行时的信息性消息
RAISERROR (@MSG, 0, 1) WITH NOWAIT

将某些内容作为信息发布。

一般来说,调用我使用的存储过程

context.Database.ExecuteSqlCommand("exec dbo.LongStoredProcedure", parameters);

我认为我可以通过设置事件监听器拦截消息,如:

var sqlConn = context.Database.Connection as SqlConnection;
if (sqlConn != null) sqlConn.InfoMessage += sqlConn_InfoMessage;

但是,在这种情况下,只要存储过程完成运行,sqlConn_InfoMessage就会受到一次攻击,所有消息都与SqlInfoMessageEventArgs消息中的换行连接。

我想要的是捕获消息,因为它们在存储过程中被发出。在这种情况下我该怎么做?直接通过sqlConn来处理整个事情?

1 个答案:

答案 0 :(得分:0)

最后this answer指出我想去的地方:

sqlConn.InfoMessage += sqlConn_InfoMessage);
var command = sqlConn.CreateCommand();
command.Transaction = context.Database.CurrentTransaction.UnderlyingTransaction 
    as SqlTransaction;
command.CommandTimeout = 60 * 20;
command.CommandText = "dbo.LongStoredProcedure";
command.CommandType = CommandType.StoredProcedure;
command.Parameters.AddRange(parameters.ToArray());
command.ExecuteScalar();

让我获得sqlConn_InfoMessage的实时更新。