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-запросе.


Ответы (0 шт):