Wim ten Brink
Wim ten Brink

Reputation: 26682

Capture Stored Procedure print output in .NET (Different model!)

Basically, this question with a difference...

Is it possible to capture print output from a TSQL stored procedure in .NET, using the Entity Framework?

The solution in the other question doesn't work for me. It works with the connection type from System.Data.SqlClient but I'm using the one from System.Data.EntityClient which does not have an InfoMessage event. (Of course, I could just create an SQL connection based on the Entity connection settings, but prefer to do it directly.)

Upvotes: 9

Views: 3766

Answers (4)

Mr Moose
Mr Moose

Reputation: 6354

Based on the answer from @samneric, but with some modifications for EF Core we used this to allow debugging of a wayward stored procedure;

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

Upvotes: 0

Ryan Dooley
Ryan Dooley

Reputation: 254

This is what worked for me, samneric's example was helpful but not the exact syntax.

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");


            }

Upvotes: 1

samneric
samneric

Reputation: 3218

Just to show people a complete working example from Craig's answer and Wim's response:

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

​S​t​e​ve​​​​​​

Upvotes: 9

Craig Stuntz
Craig Stuntz

Reputation: 126587

Actually, it does, but since the EF is not SQL Server specific, you have to cast it:

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

Upvotes: 12

Related Questions