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

时间:2010-03-08 14:17:57

标签: c# .net entity-framework stored-procedures

基本上,this question有所不同......

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

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

4 个答案:

答案 0 :(得分:11)

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

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

答案 1 :(得分:8)

只是为了向人们展示Craig的答案和Wim的回答的完整工作实例:

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

史蒂夫

答案 2 :(得分:1)

这对我有用,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");


            }

答案 3 :(得分:0)

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

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