Я пытаюсь использовать ORM, учитывая следующие требования:
1) Использование .NET Framework (последняя версия в порядке)
2) Должен быть в состоянии использовать Sybase, Oracle, MSSQL взаимозаменяемо
3) Схема в основном статическая, НО есть динамические части.
Я немного знаком с SubSonic и NHibernate, но не очень хорошо.
У меня появляется ноющее чувство, что ORM может делать то, что я хочу, но я не знаю, как использовать это в данный момент.
SubSonic, вероятно, не оптимален, поскольку в настоящее время он не поддерживает Sybase, и написание моего собственного провайдера для него сейчас выходит за рамки моих возможностей и возможностей.
Для # 3 (выше) есть пара таблиц метаданных, которые описывают таблицы, которые поставщики могут "прикреплять" к существующей базе данных.
Давайте назовем эти мета-таблицы и мета-поля .
Существует базовая статическая схема, с которой ORM (NHibernate ATM) хорошо справляется.
Однако поставщик может добавить таблицу в базу данных (физически), если он также добавляет данные в таблицы метаданных для описания своей структуры.
Что я действительно хотел бы, так это чтобы я мог как-то «кормить» ORM этими метаданными (таким образом, чтобы он понимал) и иметь их в этот момент, чтобы я мог манипулировать данными.
Моя основная цель состоит в том, чтобы уменьшить объем построения обобщенных операторов SQL, которые я должен выполнять на этих динамических таблицах.
Я также хотел бы не беспокоиться о различиях в отправке SQL в Sybase, Oracle или MSSQL.
Моя основная проблема заключается в том, что у меня нет возможности сообщить ORM о динамических таблицах до времени выполнения, когда у меня будет доступ к метаданным
Редактировать : Пример использования может быть похож на тот, который обрисован в общих чертах здесь :
IDataReader rdr = новый запрос ("DynamicTable1"). WHERE ("ArbitraryId", 2) .ExecuteReader ();
(Однако не похоже, что SubSonic будет работать, так как нет поставщика Sybase (см. Выше)