1

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

4

2 回答 2

2

使用DbContext( DbQuery) 它很简单:

query.ToString()

ObjectContext( ObjectQuery):

((ObjectQuery)query).ToTraceString()

顺便说一句,query可以是任何基于 a DbSet(或ObjectSet,分别)的表达式。所以类似的东西dbContext.employee.Where(e => e.Name == "Gates").ToString()也会显示生成的 SQL 查询。

强制执行的 LINQ 语句(如ToList()Single()FirstOrDefault()等)创建一个新对象ToString()并将返回该对象的类型名称。

于 2012-10-02T18:12:16.237 回答
0

ToTraceString()还在 EF 中,一直在同一个地方。但是,它在ObjectQuery,不是DbQuery。话虽如此,我从未见过用于 EF 的 SQL Server 提供程序*;它总是使用 SQL 中的离散字段。

于 2012-10-02T17:34:03.417 回答