У меня есть 3 таблицы в базе данных Oracle 12c.
MainTable(Id number, Table1_Id number, Table2_Id number)
Table1(Id number, Registration_Date date, Kind_Id number)
Table2(Id number, Pin)
Итак, я написал следующий код мира, используя платформу сущностей:
dbContext.Set<MainTable>
.Where(mt => mt.Table2.Pin == pin && pd.Table1.KindId == kindValue)
.Select(pd => new { pd.Id, pd.Table1.RegistrationDate })
.ToList();
В этом операторе тип pin
переменной равен string
, а тип kindValue
равен int
. Когда я запускаю этот код, EF генерирует следующий запрос:
Opened connection at 11-Mar-19 14:31:05 +04:00
SELECT
"Extent1"."ID" AS "ID",
"Extent3"."REGISTRATION_DATE" AS "REGISTRATION_DATE"
FROM "SCHEMA_NAME"."MAIN_TABLE" "Extent1"
INNER JOIN "SCHEMA_NAME"."TABLE2" "Extent2" ON "Extent1"."TABLE2_ID" = "Extent2"."ID"
INNER JOIN "SCHEMA_NAME"."TABLE1" "Extent3" ON "Extent1"."TABLE1_ID" = "Extent3"."ID"
WHERE ((("Extent2"."PIN" = :p__linq__0) OR (1 = 0)) AND ("Extent3"."KIND_ID" = :p__linq__1))
-- p__linq__0: '7E998YT' (Type = Object)
-- p__linq__1: '1' (Type = Int32, IsNullable = false)
-- Executing at 11-Mar-19 14:31:05 +04:00
-- Completed in 5822 ms with result: OracleDataReader
Closed connection at 11-Mar-19 14:31:11 +04:00
Когда я выполняю этот запрос в SQL Developer worksheet
, тогда запрос дает результат в 0.0032
секунд, но EF выполняет 5.822
секунд. Я не понимаю, почему это происходит. Кто-нибудь может объяснить, почему возникает такая разница во времени выполнения?
Еще одна интересная вещь - EF генерирует условие OR (1 = 0)
в запросе. В чем моя ошибка?