2009-05-27 50 views
13

在我的ASP.NET應用程序中,我想使用Entity framweok通過數據訪問層實現,因此我可以將其用作ORM工具。但我不希望應用程序的其餘部分關心我正在使用它,或者受到任何實體框架特定的信息的污染。使用實體框架作爲數據訪問層

我似乎無法找到任何人在他們的數據訪問層中獨佔使用實體框架,所以我很想看到任何在線的這個/經驗人的例子。

+0

Stackoverflow的DAL:http://blog.stackoverflow.com/2008/09/what-was-stack-overflow-built-with/ – 2010-04-21 19:21:54

回答

2

我已經使用實體框架作爲我最後兩個項目的數據訪問。這些對於數百張桌子來說是很大的(對我來說至少)項目,5-15名開發者持續一年以上。

在這兩個項目中,我們都有一個WCF接口進入我們的服務層。我們不想在我們的WCF合同中使用實體框架對象。因此,我們創建了數據傳輸對象,並且我們映射了DTO和實體框架對象。

這打破了依賴關係,並保持合約儘可能穩定,但創造了一些額外的工作。

根據您的時間範圍,我會這樣做,或者在Kieth提到的下一個版本中使用POCO對象。

2

EF或任何其他ORM(即NHibernate)不會取代您的數據訪問層。相反,ORM是從DAL到數據源的抽象層。

不要被愚蠢地認爲EF取消了DAL。 EF只是另一個數據源框架。但是,在最佳實踐中,您仍然想要抽象並集中共同DAL中的所有訪問(讀/寫)。

這是我說話的完美例子。假設你必須在你的一個用例中刪除一個給定的用戶。但是,在刪除用戶時,您可能需要刪除與已刪除用戶關聯的其他記錄以避免孤立記錄(老實說,我會使用存儲的proc來執行此操作)。現在這個用例被卡在一些非常特定於這個用例的BO中,並且因爲用戶只是總用例的一部分而被刪除。

在某個時間點,您有一位開發人員被要求整合不同的使用案例,涉及的事件涉及刪除用戶!開發人員可能會做一些事情。 1)他可能會創建一個新的用例,該用例現在涉及刪除用戶,但忘記刪除該用戶的任何關聯記錄。 2)他可能已經注意到了以前的用例,但不能直接使用它,而不會將其用於用例,因此他決定將該用例的一部分正確刪除用戶及其相關記錄,並將其複製到他的用例中。現在我們有重複部分的代碼,幾乎做同樣的事情 - 刪除用戶。育!現在,把這個'刪除用戶'稱爲DAL。用戶助手類,可以避免這種糟糕的設計實踐。

無論如何,關於EF的一件好事,它減少了我手動創建的業務實體的數量,並且從應用程序級別提供不同於數據存儲級別數據的視圖。