2009-09-11 131 views
0

使用SubSonic 3 ActiveRecord,我从具有外键的现有数据库生成代码。为了确保数据库架构在切换数据库时始终是正确的,我将迁移代码放置在应用程序的开始位置,对ActiveRecord.tt生成的每个类使用IDataProvider.MigrateToDatabase<MyClass>()。事实证明,迁移代码不会重新生成外键。SubSonic 3 ActiveRecord迁移忽略外键

我应该如何处理FKS:

  • 完全忘记FKS,并在代码中处理级联删除。优点:Rails方式,业务逻辑保存在代码中。缺点:需要处理交易,代码变得更加丑陋;如果数据库被切换/清除(需要始终保持原始模式重新生成/修改AR代码,否则生成的一对多属性将丢失?),数据库和ActiveRecord之间的模式往返变得不可能。同样,我的同事可能会认为我很生气。
  • 添加一个步骤进行移植以手动创建FK。优点:模式将始终保持最新; AR代码将始终可以重新生成。缺点:数据库依赖(小问题?)
  • 以某种方式找到一种方法来在代码中定义FK关系,以便可以正确迁移模式。

我做错了吗?我会很感激任何建议。

回答

2

我正在为FK的东西工作,现在的类和相信与否 - 这是非常困难的。如果你的父类包含一个子类的列表 - 它是多/多?也许 - 如果你的子类包含一个参考。这是一个弱的假设(双向不是一个好设计)。

无论如何。

AR对于DB优先的人来说意味着更多 - 所以创建你喜欢的DB,然后运行AR模板。你的FK将会受到尊重等等。

+0

嘿罗布 我完全按照你的建议,但由于某种原因亚音速不能决定主键。这里是问题的链接。 http://stackoverflow.com/questions/1806953/subsonic-cant-decide-which-property-to-consider-the-key-foreign-key-issue 请咨询解决方案,因为它已成为一个节目塞为了我。 谢谢 AJ – 2009-11-30 17:36:41

+0

嗯,该链接似乎是borked。我不知道你的意思是“找不到主键” - 你有没有试过PrimaryKey属性? – 2009-12-03 00:17:04