使用EF获取SqlCommand

时间:2012-10-02 17:25:20

标签: entity-framework sqldependency

我在我的应用程序中创建了一个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查询字符串....

2 个答案:

答案 0 :(得分:2)

使用DbContextDbQuery)就像:

一样简单
query.ToString()

使用ObjectContextObjectQuery):

((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中使用离散字段。