2010-09-02 106 views
2

當我開始用asp.net編寫web應用程序時,我開始使用Linq-To-SQL映射器來訪問MSSQL Server的小型項目。
獲得一定的成績後,我轉入了經典的3層,包括圖形層,業務層,數據層。數據層的唯一功能是提供插入/更新/刪除方法,沒有任何邏輯和邏輯選擇方法的形式。如何將我的業務層對象映射到數據庫中?是否是O/R映射器的時間?

過了一段時間,我意識到最好不要將數據庫類提供給GUI(不幸的是花了一些時間)。我開始在BL中使用Business類,這些類用於BL執行的所有操作,並由GUI以獲取BL中的List的形式顯示。
一個很大的優點是我可以提供其他屬性,這些屬性不是由數據庫本身表示的。然而,我在BL裏面用映射相應的BL類到數據庫類的方法進行了映射。

我想這就是O/R映射器派上用場了嗎?直到現在我還沒有意識到他們的目的,但我想我只是找到了它。我最近嘗試過使用.net framework 4的新實體框架,但我只是像Linq-To-SQL DataContext一樣使用它。

有沒有辦法自動實現映射?如果是的話,是新的實體框架提供了什麼,或者我需要尋找像NHibernate一樣的O/R映射器?

回答

2

(實體框架的O/R映射器。)

如果你認真對待你的手髒ORM(但相對較新的那個區域),我強烈建議像TekPub的視頻上這些話題。您將能夠從頭開始查看這些工具的使用情況。這是對你提到的一些簡單而現實的問題的優雅介紹。

3

我只在我的項目中使用NHibernate。我喜歡它給我的控制和靈活性。有一個名爲Active Record的「快捷方式」,它使用了NHibernate,但是它爲NHibernate提供了一個非常好的簡單接口。

NHibernate有一個陡峭的學習曲線,但是當你過去時 - 它確實是一帆風順的。當(如果)你冒險的方式NHibernate,檢查出Ayende酷技巧。

+0

AR是好的,如果你確定你永遠不想以任何其他方式做ORM。剝離AR實現,尤其是裝飾器,退出你的領域是一件非常痛苦的事情。我通常更喜歡Repository模式;另一方面的ORM可以是任何你想要的,從一個自己存儲的proc系統到Linq2SQL到NHibernate到EF,如果你已經很好地構建了你的IRepository接口,你的代碼將永遠不會知道它們的區別。 – KeithS 2010-09-03 00:32:31

0

我用了Entity Framework 4.0(+ CTP)很愉快。我想你會更容易處理這樣的ORM。 EF4提供的一切您需要與C#/ .NET中的MSSQL進行互操作。您不必編寫一行SQL,並且它完全支持LINQ(通過ObjectQuery)。

0

LinqToSql是一個ORM,所以你已經使用了一個。將LinqToSql取出並用EntityFramework或NHibernate替換它並不能解決你現在看到的問題。

這裏有一些事情你應該瞭解,以幫助給你額外的背景: