Лучший Ruby ORM для работы с устаревшей базой данных SQL Server? - PullRequest
4 голосов
/ 12 марта 2010

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

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

Ответы [ 3 ]

2 голосов
/ 15 марта 2010

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

1 голос
/ 13 марта 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 , но он не работал у меня вообще с MRI 1.8.7. Команда IronRuby в Microsoft использует версию этого адаптера для запуска IronRuby on Rails с MS SQL Server, поэтому вы можете попробовать использовать комбинацию Active Record on IronRuby. IronRuby в настоящее время находится на этапе Release Candidate, так что это должно сработать, хотя в настоящее время определенно много исправлений ошибок.

0 голосов
/ 12 марта 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 }
...