C# 在.NET中捕获存储过程打印输出(不同型号!)

C# 在.NET中捕获存储过程打印输出(不同型号!),c#,.net,entity-framework,stored-procedures,C#,.net,Entity Framework,Stored Procedures,基本上,不同的是 是否可以使用实体框架从.NET中的TSQL存储过程捕获打印输出 另一个问题的解决方案对我不起作用。它使用System.Data.SqlClient中的连接类型,但我使用的是System.Data.EntityClient中没有事件的连接类型。(当然,我可以根据实体连接设置创建SQL连接,但更愿意直接创建。)事实上,确实如此,但由于EF不是特定于SQL Server的,因此必须强制转换: var sqlConn = (SqlConnection)Context.Connectio

基本上,不同的是

是否可以使用实体框架从.NET中的TSQL存储过程捕获打印输出


另一个问题的解决方案对我不起作用。它使用System.Data.SqlClient中的连接类型,但我使用的是System.Data.EntityClient中没有事件的连接类型。(当然,我可以根据实体连接设置创建SQL连接,但更愿意直接创建。)

事实上,确实如此,但由于EF不是特定于SQL Server的,因此必须强制转换:

var sqlConn = (SqlConnection)Context.Connection.StoreConnection;

为了向人们展示Craig的回答和Wim的回答中完整的工作示例:

var entityConnection = (EntityConnection)Context.Connection;
var sqlConnection = (SqlConnection)entityConnection.StoreConnection;
sqlConnection.InfoMessage += (s,a) => Debug.WriteLine(a.Message);

​s​T​E​ve​​​​​​

这对我来说很有用,samneric的例子很有帮助,但不是确切的语法

string message = Empty.string;

using (var context1 = new DatabaseEntities())
            {
                var conn =
                ((EntityConnection)
                    ((IObjectContextAdapter)context1).ObjectContext.Connection);

                var sqlConnection = (SqlConnection)conn.StoreConnection;

                sqlConnection.InfoMessage += (s, a) => message = a.Message;

              data = context1.storedProc("Parameter");


            }

基于@samneric的答案,但对EF-Core进行了一些修改,我们使用它来调试任性的存储过程

    DbConnection connection = Database.GetDbConnection();
    var sqlConnection = connection as SqlConnection;
    sqlConnection.InfoMessage += (s, a) => System.Diagnostics.Debug.WriteLine(a.Message);

伟大的虽然我不得不做双重排版。通过EntityConnection从DbConnection到SqlConnection。