我找到this answer,听起来几乎就是我正在做的事情。关于datamapper是否可以通过数据对象支持SQL Server,我听到了各种各样的答案。基本上,我们有一个应用程序在SQL Server中使用一致结构化的数据库,一致地命名表等。我们正在制作各种必须与之交互的工具和东西,其中一些是远程的,所以我决定我们需要创建一些通用的,简单的访问点来对SQL Server应用程序进行读/写操作,因为它的API是所有C#和我鄙视的其他事情。
现在我的问题是,如果有人知道红宝石ORM可以通过定义每个模型的pkeys,fkeys,表名等的约定来为其他应用程序的遗留数据库创建模型的任何示例或项目。续集是唯一的ORM我已经和SQL Server一起使用但从来没有做过这样的事情。有什么建议吗?
答案 0 :(得分:2)
Sequel不会自动创建模型,但您可以编写一个扩展,其中包含Sequel :: Database#表和Sequel :: Database#schema(对于每个表)的输出,并对键和表进行了一些分析用来猜测关联的名字。 Sequel默认不这样做的原因是在所有情况下都无法正确执行此操作。但是,如果您的数据库始终遵循某些约定,那么您当然可以使其工作。
答案 1 :(得分:1)
我不能给你一个完整的例子,因为我只是开始涉足使用Ruby和MS SQL Server,但根据我的经验和你所说的,我建议使用Sequel的模型工具
Sequel绝对支持并且针对MS SQL Server进行了测试,但是使用Active Record的情况似乎有点不太明显。我没有使用过DataMapper,所以无法对此发表评论。据我所知,Ruby的唯一ORM是DataMapper,Sequel,Active Record 2和Active Relation / Active Record 3(新的Rails 3数据访问)。
有an Active Record adapter for MS SQL,但它对我来说根本不适用于MRI 1.8.7。 Microsoft的IronRuby团队正在使用此适配器的一个版本在带有MS SQL Server的Rails上运行IronRuby,因此您可以考虑在IronRuby组合上尝试使用Active Record。 IronRuby目前处于Release Candidate阶段,所以这应该有效,尽管目前仍有很多bug修复工作。
答案 2 :(得分: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 }