4

我找到了这个答案,听起来几乎就是我在做什么。关于 datamapper 是否可以通过数据对象支持 SQL Server,我听到了不同的答案。基本上,我们有一个在 SQL Server 中使用一致结构的数据库、一致命名的表等的应用程序。我们正在制作各种必须与之交互的工具和东西,其中一些是远程的,所以我决定我们需要创建一些通用的、简单的访问点来对 SQL Server 应用程序进行读/写操作,因为它是 API都是我鄙视的C#和其他东西。

现在我的问题是,是否有人知道任何示例或项目,他们知道 ruby​​ ORM 可以通过定义每个模型的 pkeys、fkeys、表名等的约定,本质上为另一个应用程序的遗留数据库创建模型。续集是我唯一的 ORM已经与 SQL Server 一起使用过,但从未做过类似的事情。有什么建议么?

4

3 回答 3

2

Sequel 不会自动创建模型,但您可以编写一个扩展,获取 Sequel::Database#tables 和 Sequel::Database#schema 的输出(对于每个表),并对键和表名进行一些分析以猜测在协会。Sequel 默认不这样做的原因是不可能在所有情况下都正确执行。但是,如果您的数据库始终遵循某些约定,您当然可以让它工作。

于 2010-03-15T02:36:32.517 回答
1

我不能给你一个完整的例子,因为我才开始涉足使用 Ruby 和 MS SQL Server,但根据我的经验和你所说的,我建议使用 Sequel 的模型工具。

Sequel 肯定支持 MS SQL Server 并已针对 MS SQL Server 进行了测试,但 Active Record 的情况似乎不太明确。我没有使用过 DataMapper,所以不能对此发表评论。据我所知,Ruby 的唯一 ORM 是 DataMapper、Sequel、Active Record 2 和 Active Relation/Active Record 3(新的 Rails 3 数据访问东西)。

一个 MS SQL 的 Active Record 适配器,但它对 MRI 1.8.7 根本不起作用。Microsoft 的 IronRuby 团队正在使用该适配器的一个版本来运行 IronRuby on Rails 和 MS SQL Server,因此您可以考虑尝试在 IronRuby 上组合 Active Record。IronRuby 目前处于候选版本阶段,所以这应该可以工作,尽管目前肯定还有很多错误修复正在进行。

于 2010-03-13T12:48:21.183 回答
0

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 }
于 2010-03-12T11:16:28.087 回答