我可以在执行之前修改Entity Framework生成的sql吗?

时间:2012-03-28 16:56:29

标签: sql-server entity-framework multi-tenant query-hints

我有一个多租户数据库,根据查询的租户返回大量不同的行。最近我们遇到了参数嗅探问题,其中针对一个租户执行的实体框架(EF)查询(TenantID = 1)比针对另一个租户(TenantID = 2)的相同查询花费更长的时间。我做了一些研究,并确定EF不支持查询提示(请参阅this question),这将允许我强制查询每次重新编译。现在我想知道我是否可以拦截由EF生成的Sql查询并在执行之前手动附加“OPTION(OPTIMIZE FOR UNKNOWN)”。这可能吗? EF可插拔,以便我可以在生成之前修改生成的Sql吗?有没有如何做到这一点的例子?

1 个答案:

答案 0 :(得分:1)

您是否尝试过解决此问题?您可以强制EF不使用参数,例如:

var q = Context.Tenants.Where(t => t.TenantID == tenantId);

...将使用参数,但是:

var r = Context.Tenants.Where(t => t.TenantID == 1);

......不会,我敢打赌:

var s = Context.Tenants.Where("it.TenantID = 1");

......也不会。

相关问题