Насколько совместимы ORM и существующие базы данных, которые имеют множество ограничений (особенно ограничений уникального ключа / уникальных индексов помимо первичных ключей), применяемых в самой базе данных?
(Часто это уже существующие базы данных, совместно используемые многочисленными унаследованными приложениями. Но хорошей практикой моделирования баз данных является определение как можно большего количества ограничений в базе данных, как двойной проверки приложений. Также обратите внимание, что я являюсь движком базы данных. работа с не поддерживает отложенную проверку ограничений.)
Причина, по которой я спрашиваю, состоит в том, что ORM, которые я изучал, NHibernate и Linq to SQL, кажется, не очень хорошо работают при наличии уникальных ограничений базы данных. Например, удаление строки и повторная вставка строки с тем же бизнес-ключом приводит к исключению внешнего ключа. (Есть тонкие, также трудно избежать примеров.) ORM наблюдают ограничения первичного ключа и внешнего ключа, но, как правило, забывают об уникальных ограничениях.
Я понимаю, что есть обходные пути, такие как метод сброса NHibernate. Тем не менее, я чувствую, что это крайне утечка абстракции и затрудняет разработку приложения с учетом разделения интересов. В идеале все объекты могут быть обработаны в памяти подпрограммами, и тогда основная процедура может взять на себя ответственность за вызов для фактической синхронизации базы данных. Это изолирует обновление и позволяет настраиваемой логике проверять все обновления перед их фактической отправкой в базу данных.
Выполнение команд в правильном порядке нетривиально. Смотри мой вопрос здесь . Тем не менее, я ожидал лучшей поддержки распространенных случаев среди популярных ORM. Это кажется очень важным для внедрения ORM в существующую среду.
Каким был ваш опыт использования технологий ORM, освещает эти проблемы?