Мы используем EF 5.0 в качестве нашего ORM для выбора в нашем бизнес-решении, структурированном в n-слойном стиле со всем развязанным и красивым корнем композиции с ninject.
В последнее время мы создаем базу данных, которая использует разделение под ними, и у нас есть некоторые важные индексы на столбцах DATE
.
Столбцы правильно объявлены на Sql Server 2008. Мы также добавили правильный тип данных в сопоставления EF с инструкцией HasColumnType("Date")
.
Тем не менее, при запросе таблицы через Linq to Entities параметры, которые мы фильтруем датами, создаются типа DateTime2
, и даже столбцы передаются в DateTime2
в запросах, чтобы тип соответствовал параметрам.
У этого поведения есть несколько проблем. Прежде всего, если я говорю EF-движку, что столбец в базе данных DATE
, почему он должен отличать его от DateTime2
?
Во-вторых, это приведение базы данных игнорирует индексы, поэтому не использует разделение. У нас есть один год на физическое разбиение, и если я задам диапазон дат, скажем так, февраль 2013 года в марте 2013 года, сканирование должно происходить только на одном физическом разделе. Он работает корректно, если вручную использовать правильный тип данных DATE
, но с приведением в DateTime2
все разделы будут отсканированы, что резко сократит производительность.
Теперь я уверен, что упускаю что-то, потому что было бы довольно глупо, что Microsoft ORM не работает на Microsoft Sql Server.
Мне не удалось найти документацию о том, как EF использует правильные типы данных в запросах, поэтому я прошу здесь. Любая помощь будет оценена.
Спасибо.