Какой ORM даст мне проверенные компиляцией запросы? - PullRequest
4 голосов
/ 28 мая 2009

Какой ORM даст мне проверенные компиляцией запросы?

Проверено ли время компиляции linqtosql?


Edit:

Скажем, я пишу запрос, который ссылается на столбец с именем «TotalSales». Затем я переименую столбец в моей базе данных в TotalSales2 (и любой другой файл конфигурации, например: Employee.cfg.xml в nHibernate). Когда я компилирую проект, я хочу, чтобы Visual Studio сообщала мне, что столбец totalSales не существует, и тогда я пойду и изменю его.

Ответы [ 7 ]

5 голосов
/ 28 мая 2009

Насколько я знаю, их нет. Они часто позволяют вам создать запрос LINQ, который, например, не может быть переведен в SQL. Кроме того, мне не известно о каких-либо проверках времени компиляции, чтобы ваши отображения правильно отображались в вашей базе данных.

Вы можете и должны, по моему мнению, выполнять все эти проверки в рамках тестов. Большинство ОРМ делают это легко.

2 голосов
/ 28 мая 2009

Я использую LLBLGen , но он должен быть "обновлен" при внесении изменений в модель данных. Я не думаю, что вы получите ORM, который В СКОРОСТЬ проверяет наличие изменений в базе данных. Вы просите совсем немного.

1 голос
/ 21 июня 2009

В общем, вам нужно 2 функции вместе:

  • Проверенные во время компиляции запросы (= ORM с реализацией LINQ). Обычно это не проблема - по крайней мере, некоторые инструменты поддерживают это.
  • Шаг перед сборкой, обновление ваших сущностей на основе схемы базы данных. AFAIK это редко реализуется таким образом - обычно вы должны явно обновить модель по схеме. Обратите внимание, что эта часть обычно довольно дорогая.
1 голос
/ 15 июня 2009

Возможно, не совсем то, что вы ищете, но если использовать Entity Framework и выбрать «Обновить модель из базы данных» в конструкторе, вы получите сообщения о том, что поля больше не отображаются, если вы измените имена.

Это не происходит автоматически при создании проекта.

1 голос
/ 28 мая 2009

В DataObjects.Net свойства, отмеченные атрибутом [Field], всегда привязаны к полю в базе данных, поэтому вы можете быть уверены, что запрос будет переведен. Если вы используете непостоянное поле или другой неподдерживаемый оператор, транслятор запросов не выполнится во время выполнения или выполнит такую ​​операцию над извлеченными объектами (на клиенте).

Как правило, проверка времени компиляции невозможна или теоретически может быть выполнена с помощью специальных задач после сборки, которые будут сканировать скомпилированный код, находить все запросы и проверять их. Но такие проверки серьезно замедляют процесс компиляции.

0 голосов
/ 28 мая 2009

Я использовал инструмент Java под названием DODS, который был разработан приблизительно. 2000 с сервером приложений Enhydra. DODS все еще здесь: http://www.enhydra.org/tech/dods/

Способ работы DODS, который соответствует вашей цели проверки во время компиляции, заключается в том, что это инструмент генерации кода. Он генерирует классы Java, соответствующие таблицам в вашей базе данных. Экземпляры объектов этих классов имеют методы получения и установки для каждого столбца в таблице. Конечно, если вы измените структуру своей базы данных, вам придется заново генерировать код Java с использованием DODS.

Пока вы поддерживаете сгенерированный код в соответствии со структурой вашей базы данных, он обеспечивает проверку во время компиляции, что любой код приложения, использующий эти классы, запрашивает допустимые таблицы и столбцы.

Во всяком случае, я понимаю, что вы отметили свой вопрос с C # и ASP.NET. Инструмент, который генерирует код Java, не будет таким полезным для вас. Но для .NET может существовать другой инструмент, более конкретно работающий по тому же принципу генерации кода, который сопоставляется со структурой базы данных. Поэтому я бы рекомендовал ограничить ваш поиск инструментами .NET ORM, которые что-то говорят о генерации кода.

0 голосов
/ 28 мая 2009

SubSonic может сделать это, если вы включите шаг генерации кода в качестве события перед сборкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...