2012-02-15 29 views
1

在使用了NHibernate幾年之後,我現在正在學習Entity Framework以用於我的下一個項目。目前,我正試圖在代碼優先或模型優先的方法之間做出決定。模型優先的方法吸引我,但結果必須是ORM不可知的。爲此,我在思考以下幾點。創建T4模板可以創建T4模板,該模板從.edmx文件的CSDL和C-S映射內容生成類和.hbm.xml文件(用於NHibernate)?實體數據模型(.edmx文件)ORM不可知?

回答

3

沒有映射是ORM不可知的,因爲它是該ORM API的一部分,或者您是否看到使用NHibernate的hbm文件的實體框架? EDMX是EDM(實體數據模型)的XML表示形式,它是MS資產,主要用於MS API。此外,並非所有由MS提供的EDM處理API都可訪問(內部實現)。 EDMX不是ORM不可知的。更糟的是,它甚至不是數據庫不可知的。

無論如何,您可以創建任何自定義工具或將EDMX作爲輸入並提供其他映射作爲輸出的轉換。你只需要瞭解輸入和輸出格式。我不確定T4是否可以直接使用,但它絕對有可能。但它不會實用。實際上是使用單個ORM來實現其全部功能並使用該ORM可用的工具。

+0

如果EDMX僅作爲XML文件處理,那麼它不使用實體框架API,那麼正確?我不會試圖保持對MS API的一般不確定性,因爲這是.NET的整體。 – HappyNomad 2012-02-15 21:45:37

+0

好吧,我的意思是NHibernate,沒有其他的ORM可以使用EDMX,所以它不是不可知論的。它是XML並且您可以創建轉換的事實不會改變它。我會很容易地編寫一些EDMX,因爲它會使用包括ESQL查詢在內的EF高級功能,所以這些EDMX不會很費力地進行轉換。所以恕我直言,考慮從EDMX轉換到其他東西不值得。在大多數情況下,您將手動創建這些hbm文件。 – 2012-02-15 21:53:43

+0

什麼是其他一些ORMs不能使用這種方法,爲什麼不呢?您關於ESQL的觀點是一個很好的觀點。 – HappyNomad 2012-02-15 22:53:32

2

創建可從.edmx文件生成Fluent NHibernate類的T4模板是可行和實用的。我正在AMD的一個項目上,我們正在這樣做。 (我自己並不是作者。)請參閱:http://tom-jaeschke.blogspot.com/2011/08/use-entity-framework-and-nhibernate.html

+0

有趣。我正在研究做相反的可能性 - 我有一個建立的NHibernate層(NHQueryable),我希望生成一個EDMX等價物,這樣我就可以使用某些依賴MS EDM的API(例如Microsoft .Data.OData.Query)。 – lesscode 2013-06-14 20:37:59

相關問題