基本上,this question有所不同......
是否可以使用实体框架从.NET中的TSQL存储过程捕获打印输出?
另一个问题的解决方案对我不起作用。它适用于System.Data.SqlClient中的连接类型,但我使用System.Data.EntityClient中没有InfoMessage事件的连接类型。 (当然,我可以根据实体连接设置创建一个SQL连接,但更喜欢直接进行。)
答案 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);