2009-10-01 11 views
3

我有一堆我創建的POCO,我想創建一個持久層。事情是,我真的不在乎數據如何存儲在SQL Server中,我只是希望它被存儲。換句話說,我想告訴ORM工具,「這裏有一些POCO類,保存它們。」除此之外不需要做任何事情。有沒有任何可以做到這一點的C#的ORM工具?我一直在努力爭取Fluent NHibernate的工作,而Subsonic不支持關係,這使得像「爲單個帖子獲取所有評論」這樣的東西相當困難。它需要能夠自動生成一個數據庫模式,而不必設置一堆屬性和什麼。是否有一個可以將數據庫「黑盒子」的C#的ORM工具?

+0

如果數據庫中存在外鍵關係,Subsonic確實支持關係。它應該像迭代'Post.Comments'一樣簡單... – 2009-10-01 21:37:35

+0

是的,如果您使用ActiveRecord並自下而上。但是,我正在使用SimpleRepository自上而下,到目前爲止它還不支持關係。 – 2009-10-01 21:51:53

+0

當報告組想要在六個月後對自動生成的模式進行查詢時,問題就會出現。我個人設計我的課程,設計我的表格和關係(可能需要DBA的幫助),然後映射它們。 – TrueWill 2009-10-02 01:36:44

回答

2

我個人使用流利NHibernate和它爲我做你所需要的。好吧,差不多。有事情需要手動指定ManyToMany,但你無法避免它。如果你想要良好的實體設計,你必須讓一些成員爲私人,這將禁用這些成員的自動映射。不過,我改變了我的設計很多,甚至從來沒有想過我的數據庫如何改變(一個新項目的奢侈,但...)。

你看過Castle ActiveRecord嗎?你真的需要真正的POCO嗎,或者你可以忍受屬性和實體保存?那麼,我會避免,但它可能適用於你。

+0

我用Fluent NHibernate使用automapping遇到的兩個問題是:1.當我嘗試使用Dictionary列時出現了問題,2.它沒有映射枚舉,我有很多。第一個問題是可以理解的(我應該將類中的鍵/值對包裝起來),但是我找不到第二個解決方案。 – 2009-10-01 21:55:29

+0

我使用枚舉沒有問題。我有問題,但谷歌幫助簡單的解決方案。這裏有很多關於這個的問題,並且很容易解決。現在還不能確切地說,但我剛剛添加了IPropertyConvention,據我所知,它告訴使用GenericEnumMapper進行枚舉,請參閱http://stackoverflow.com/questions/439003/how-do-you-map-an-enum -as-an-int-value-with-fluent-nhibernate,儘管你可能想使用CustomTypeIs(typeof(int))。無論如何,這不是FNH的最大問題;-) – queen3 2009-10-01 22:09:30

+0

原來,流利NHibernate的1.0 RTM可以自動映射枚舉就好(儘管字符串),但不能做枚舉的集合。看看現在是否可行。 – 2009-10-02 03:45:30

1

結賬Subsonics SimpleRepository。創建一個類,創建一個數據庫,給Subsonic一個連接字符串,並處理其餘的。俏皮。

+0

SimpleRepository不支持關係生成。如果你有一些不需要關係的單個對象(比如單個博客文章),那很好,但是在你需要關係的情況下(比如屬於某個特定文章的評論),你做了什麼? – 2009-10-01 21:58:14

0

看一看的DevExpress的eXpress Persistent Objects

+0

我看了一下,但是因爲你必須從XPObject繼承,它會把POCO對象變成持久感知對象。 – 2009-10-01 23:26:04

6

你可以試試DataObjects.Net,但它不是你在尋找什麼。首先它的實體不是poco,你必須從某種基類繼承它們。其次,你應該標記你想用特殊屬性保存的字段。

那麼爲什麼我推薦DataObjects呢?因爲我認爲它完全是黑箱數據庫。您只需製作一堆對象並要求ORM保存它們。

  • 它在運行時在指定的RDBMS中自動生成數據庫模式。
  • 您不必調用像.Save()這樣的方法來保存更改,就像使用常用對象一樣工作。
  • 您不必編寫SQL查詢 - 它完全支持LINQ。
  • 即使當現有數據庫升級到下一個版本時,也不必處理SQL腳本。
相關問題