Это немного зависит (:)) от того, какой маппер OR вы используете, так что потратьте некоторое время на изучение того, что db поддерживает рассматриваемый маппер OR.
Например, операторы сопоставления Microsoft не поддерживают все встроенные типы данных SQL Server, не поддерживают некоторые из новых / расширенных функций TSQL (на ум приходят рекурсивные запросы, советы по оптимизации и т. Д.).
Теоретически , хороший оператор OR должен быть достаточно гибким, чтобы преодолеть (и позволить вам сопоставить) хорошо спроектированную схему реляционной базы данных с хорошей объектной моделью. На самом деле нам еще нужно пройти, прежде чем все кусочки головоломки будут на месте; хотя многие сопоставители OR поддерживают расширенное сопоставление, оно часто происходит за счет сложных запросов и проблем с производительностью.
Для хорошей производительности БД (и для сохранения здравомыслия БД :)) вы все равно должны следовать передовым методам, когда дело доходит до проектирования схемы БД; сначала нормализуйте и денормализуйте там, где это необходимо. На стороне кода, не переусердствуйте с вашей объектной моделью ; даже если OR mapper поддерживает сложные модели наследования и сущности, которые объединяют много таблиц, это также области, где вы рискуете столкнуться с проблемами из-за слишком сложных запросов, попадающих в базу данных и т. д. Профиль, профиль, профиль и не просто использовать ORM сгенерированные запросы как должное. Имейте в виду, что запросы, сгенерированные сопоставителем OR, часто могут быть настроены так же, как обычные запросы SQL, и что два функционально эквивалентных запроса на стороне объекта (например, запросы linq) могут иногда приводить к совершенно разным запросам SQL.