FirstOrDefault, Nullable-поле и прозводительность
Используется EF6 (Oracle.ManagedDataAccess.EntityFramework). Режим database-first.
Есть модель
public partial class Bar
{
[System.ComponentModel.DataAnnotations.Key]
public System.Guid Field_1 { get; set; }
public string Field_2 { get; set; }
public string Nullable_Field { get; set; }
}
Nullable_Field может принимать значения NULL.
Есть LINQ-запрос
string argument = GetStringArgument();
var bar = await myDbContext.Bars.FirstOrDefaultAsync(b=>b.Nullable_Field == argument);
Который генерит следующий SQL
SELECT "Extent1"."FIELD_1" AS "FIELD_1",
"Extent1"."FIELD_2" AS "FIELD_2",
"Extent1"."NULLABLE_FIELD" AS "NULLABLE_FIELD"
FROM "FOO"."BAR" "Extent1"
WHERE
(
(
"Extent1"."NULLABLE_FIELD" = :p__linq__0
)
OR
(
(
"Extent1"."NULLABLE_FIELD" IS NULL
)
AND
(
:p__linq__0 IS NULL
)
)
)
AND
(
ROWNUM <= (1)
)
Это проблема. Я понимаю, что запрос учитывает, что я могу передать аргумент со значением null(c#) и он мне вернёт записи с значением NULL(database). Но мне такой сценарий не интересен, аргумент у меня всегда не null. А блок условия с проверкой на NULL убивает производительность запроса, и имеющийся в базе данных индекс по Nullable_Field не спасает. Как объяснить EF, что меня не интересуют значения NULL, что я обязуюсь передавать не null-аргумент, что блок с NULL не нужен в sql-запросе.