Лучший Ruby ORM для обертывания устаревшей базы данных SQL Server?

Я нашел этот ответ, и он звучит почти так же, как я 'я делаю. Я слышал смешанные ответы о том, может ли datamapper поддерживать SQL Server через объекты данных. По сути, у нас есть приложение, которое использует согласованно структурированную базу данных, таблицы с одинаковыми именами и т. Д. В SQL Server. Мы создаем всевозможные инструменты и прочее, которые должны взаимодействовать с ним, некоторые из них удаленно, поэтому я решил, что нам нужно создать некую общую простую точку доступа для выполнения операций чтения / записи в приложении SQL Server, поскольку это API это все C # и другие вещи, которые я презираю.

Теперь мой вопрос: есть ли у кого-нибудь известные им примеры или проекты, в которых Ruby ORM может по существу создавать модели для устаревшей базы данных другого приложения, определяя соглашения для каждой модели pkeys, fkeys, имен таблиц и т. Д. Sequel - это единственная ORM, которую я ' я использовал с SQL Server, но никогда не делал ничего подобного. Какие-либо предложения?


person Technocrat    schedule 12.03.2010    source источник


Ответы (3)


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

person Jeremy Evans    schedule 15.03.2010
comment
Спасибо. Я решил использовать Sequel, поскольку использовал его раньше, и я могу сопоставить его с моей моделью с помощью довольно минимального количества кода. - person Technocrat; 16.03.2010
comment
Мне пришлось сделать это ранее на этой неделе с устаревшей базой данных Oracle. Как говорит Джереми, используйте метод tables (), чтобы получить список таблиц, затем переберите их и используйте метод схемы (: tablename), чтобы получить столбцы вместе с их определениями. ПОДСКАЗКА: используйте db_schema = Hash[*DB.schema(:tablename).flatten], чтобы преобразовать вывод schema () в хеш, чтобы упростить просмотр столбцов. - person the Tin Man; 08.10.2010

Я не могу привести вам полностью проработанный пример, поскольку я только начал пробовать себя в использовании Ruby с MS SQL Server, но, основываясь на моем опыте и ваших словах, я бы предложил использовать модельные возможности Sequel.

Sequel определенно поддерживает и протестирован на MS SQL Server, но с Active Record ситуация кажется менее ясной. Я не использовал DataMapper, поэтому не могу это комментировать. Насколько мне известно, единственными ORM для Ruby являются DataMapper, Sequel, Active Record 2 и Active Relation / Active Record 3 (новый материал для доступа к данным Rails 3).

Существует адаптер Active Record для MS SQL, но его не было. у меня вообще работают с МРТ 1.8.7. Команда IronRuby в Microsoft использует версию этого адаптера для запуска IronRuby on Rails с MS SQL Server, поэтому вы можете попробовать комбинацию Active Record на IronRuby. IronRuby в настоящее время находится на стадии Release Candidate, так что это должно сработать, хотя определенно еще много исправлений ошибок продолжается.

person Stuart Ellis    schedule 13.03.2010

ActiveRecord - это один из вариантов, который должен уметь делать то, что вы описываете. .

Так что такие вещи должны быть возможны:

class Order < ActiveRecord::Base
  establish_connection { #a hash describing your SQL Server connection attributes }
  set_table_name 'PRODUCT_ORDER' # or whatever
  set_primary_key :PROD_ORD_ID
  has_many :order_lines
end

class OrderLine < ActiveRecord::Base
  establish_connection { #as above }
  set_table_name 'ORDER_LINE'
  belongs_to :order
  has_many :products # etc...
end

order = Order.first
order.order_lines.each { |line| puts line }
person Mike Woodhouse    schedule 12.03.2010