我在我的应用程序中创建了一个SqlDependency服务。当我手动输入查询但它不能包含通配符(我真的不知道为什么)时,它可以正常工作。
例如:
//Using this SqlCommand will work
new SqlCommand("SELECT [employees].[name] FROM [dbo].[employees]", sqlNotificationConn)
//But this one won't
new SqlCommand("SELECT [employees].* FROM [dbo].[employees]", sqlNotificationConn)
//And this one won't either
new SqlCommand("SELECT * FROM [dbo].[employees]", sqlNotificationConn)
所以基本上,我想让我的DbContext生成一个完整的SELECT命令,包含它处理的每个字段。
在Linq 2 SQL中,我使用dbContext.GetCommand(.....);
在EF 4.0(或4.1?)中,我使用了dbContext.employee.ToTraceString();
但是在EF 4.4中,我找不到任何可以生成SELECT查询字符串....
答案 0 :(得分:2)
使用DbContext
(DbQuery
)就像:
query.ToString()
使用ObjectContext
(ObjectQuery
):
((ObjectQuery)query).ToTraceString()
顺便说一句,query
可以是基于DbSet
(或ObjectSet
分别)的任何表达式。因此dbContext.employee.Where(e => e.Name == "Gates").ToString()
之类的内容也会显示生成的SQL查询。
强制执行的LINQ语句(如ToList()
,Single()
,FirstOrDefault()
等)会创建一个新对象,ToString()
将返回该对象的类型名称。
答案 1 :(得分:0)
ToTraceString()
仍然在EF,它始终是同一个地方。但是,它位于ObjectQuery
,而不是DbQuery
。话虽如此,我从未见过使用EF的SQL Server提供程序*
;它总是在SQL中使用离散字段。