1

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

4

1 回答 1

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");

……也不会。

于 2012-03-28T17:25:43.180 回答