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