4
我意识到这个类似的问题已经被问了几次,并且我已经尝试了这些问题中的建议而没有成功。如何使用实体框架4.3(代码优先)和SQL Azure数据库登录SQL
我正在使用实体框架(4.3)并针对SQL Azure(在联合数据库上)运行。我希望能够记录实体框架正在生成的SQL。
我已经使用了Entity Profiler Framework,虽然这在开发过程中很有帮助,但我不确定它在生产过程中会有所帮助。
我无法使用SQL Profiler,因为这是一个SQL Azure数据库。
我试过使用EFTracingProvider并按照here中的步骤操作。不幸的是,当我尝试执行我的第一个命令(使用适当的联邦)时,我收到一个异常,指出“指定的方法不受支持”。
产生错误的代码如下:
public MyContext(int tenantId)
: base(CreateTracingConnection("TheDb"), true)
{
const string FederationCmdText =
"USE FEDERATION TenantFederation(CustomerId = {0}) WITH RESET, FILTERING=ON";
((IObjectContextAdapter)this).ObjectContext.EnableTracing();
((IObjectContextAdapter)this).ObjectContext.Connection.Open();
// This is the line which throws the exception
this.Database.ExecuteSqlCommand(string.Format(FederationCmdText, tenantId));
}
这里的例外:
Specified method is not supported.
at EFProviderWrapperToolkit.DbConnectionWrapper.CreateDbCommand()
at System.Data.Common.DbConnection.CreateCommand()
...
因此,这里是我的问题:
- 是EFTracingProvider为首选的方法记录SQL查询(全局)?
- 如果是这样,任何想法,为什么我得到上述异常?
- 如果没有,是否有另一种机制可以让我记录实体框架生成的所有SQL?
感谢您的帮助, 埃里克
这似乎是作者推荐的。 [Here](http://efwrappers.codeplex.com/)在他们说的“已知问题”中用'context.Connection.GetStoreConnection()。CreateCommand()'执行存储命令。所以有效地做你做的,并使用包装连接:) – slawek 2013-12-16 16:53:30