2008-08-26 44 views
4

我知道有幾種(自動)方法來創建數據訪問層來操縱現有數據庫(LINQ to SQL,Hibernate等)。但我越來越有點累(我相信應該有做事情的更好的方式)的東西,如:從對象定義生成數據庫表

  1. 創建/更改表在Visio
  2. 使用Visio的「更新數據庫」創建/改變數據庫
  3. 導入表變成 「LINQ to SQL類」 對象
  4. 相應
  5. 改變代碼編譯

W¯¯關於從對象/實體定義中生成數據庫模式的方法?我似乎無法找到像這樣的工具的良好參考(並且我希望至少在某些框架中有某種內置支持)。

這將是完美的,如果我可以只:

  1. 更改對象定義
  2. 變更操縱的對象
  3. 編譯代碼(對數據庫的修改完成自動神奇地)

回答

1

我相信這是Microsofy Entity Framework試圖解決的問題。雖然沒有專門設計用於「編譯(數據庫更改是自動完成的)」,但它確實解決了處理域模型更改的問題,而沒有對底層數據模型的巨大依賴。

0

一些真正的大狗,如ERwin Data Modeler,將反對DB。你需要花大價錢購買產品。

1

正如Jason所說,object db可能是一個不錯的選擇。看看db4objects

+0

這是一個非常好的產品。幾乎很好是真的......仍然在等待捕捉。 – 2009-06-23 03:21:51

+0

問題在於它是對象數據庫,因此不是基於上級關係模型。 – 2009-11-16 01:34:57

1

你所描述的是GORM。它是Grails框架的一部分,並且構建爲與Hibernate一起工作(將來可能是JPA)。當我第一次使用Grails時,它似乎倒退了。我更習慣於使用Rails風格的工作流程來製作表格並讓框架從數據庫模式中生成腳手架。 GORM會爲您保留您的域對象,以便您創建和更改對象,並管理數據庫創建/更新。現在我已經習慣了它,這更有意義。對不起,如果你不是在尋找一個新的框架,但它在版本1.1的roadmap上,以使GORM可以單獨使用。

0

我一直在挖掘一些「主要」框架,看起來Django的確如我所說的那樣。或者從screencast看來似乎是這樣。

有沒有人對此有任何評論?它工作正常嗎?

1

當我們構建我們自己的框架(Inon Datamanager)的第一個版本時,我已經讀取了預先存在的SQL表並從它們自動生成Java對象。

當來自Smalltalkish背景的同事構建了第二個版本時,他們從對象開始,然後自動生成表格。

事實上,他們完全忘記了SQL部分,直到我回來並添加它。但是現在我們只是在應用程序啓動時運行一個觸發器,它遍歷對象模型,檢查表和所有正確的列是否存在,如果不存在,則創建它們。很方便。如果你喜歡的工具不支持類似的過程,你可以在幾個小時內寫出它 - 假設與對象映射的關係相對簡單。

但重點是,它似乎取決於你是文化上的對象人還是數據庫人 - 你可以將其中任何一個視爲權威來源。

0

是的,Django運作良好。

是的,它會產生從你的數據模型定義的SQL表(用Python編寫的)

它不會永遠改變現有的表,如果你更新你的結構,您可能需要手動運行ALTER TABLE

的Ruby on Rails有一個更高級版本的這些功能(Rails遷移),但我不喜歡的框架爲多,我發現Ruby和Rails漂亮特質

4

退房DataObjects.Net - 被設計成完全支持這種情況。只有代碼,沒有別的。它的schema upgrade layer可能是你可以找到的最有特色的一個,它真的完全抽象模式升級SQL。

檢出product video - 您會發現沒有其他任何操作來同步架構。架構升級示例顯示了此功能的預期用法。

0

後期答案的種類,但這裏有雲:

我面對完全相同的問題,最終寫我自己的解決方案,這,然而僅在.NET和SQL Server的工作。它basicaly確實實現了過程你描述:嵌入式CREATE腳本作爲源代碼

  • DB對象會自動設置(或收費)使用數據訪問功能時的一部分

    • 所有DB對象保持
    • 所有非表格更改也同時自動執行(或根據請求)
    • 也可以在升級數據庫時通過(手動創建的)更改腳本來執行表格更改,這些更改可能需要特別注意遷移數據
    • 到任何DATABSE對象所做即使手動更改可以被檢測,因此該模式完整性可以被驗證和整流
    • 可選輕質ORM可以映射存儲過程和對象以及結果集(偶數倍)
    • 甲命令 - 在線應用程序有助於保持SQL源文件與開發數據庫同步

    包含數據庫的庫在LGPL許可證下是免費的。

    http://code.google.com/p/bsn-modulestore/