2009-09-11 84 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