2011-09-02 24 views
1

我有一個特定的場景,我想知道是否(以及如何)實體框架可能能夠解決。如何用動態概念層實現EF?

我正在開發一個新的解決方案的框架,這個解決方案將被傳遞給許多開發人員以隨着時間的推移而進行擴展和增強。我想提供一個簡單的數據訪問層,他們可以利用他們正在實現的領域層,而不需要他們更改數據訪問代碼。我正在研究不同的工具,比如NHibernate,LINQ-to-SQL,EF以及老的ADO.NET。

作爲我後一個實例中,使用LINQ到SQL,在域中的層的代碼將呼籲L2S的DataContext它返回一個IQueryable <Ť>的GetTable <Ť>方法。從理論上講,這意味着DataContext可以解析任何T的請求。當然,實際上,DataContext必須知道如何處理T.看看EF如何工作,我看到了與其他工具的一些相似之處,但可以我很難找到自己如何實現自己的目標。這裏是想什麼,我有發生:

我提供一個默認的「上下文」暴露喜歡GetTable <牛逼>(例如查詢<牛逼>)返回的IQueryable <牛逼>的方法。這允許未來的增強,其中T代表尚未實現的EntityTypes,並且使得開發人員可以更容易地專注於域層,因爲他們所需要做的就是調用GetTable <T>(或類似的)。

域開發人員唯一的其他要求是提供概念層(T)映射到存儲層(物理數據庫模式)的映射層。

FWIW,我相信這很容易用NHibernate通過映射XML文件來完成。有沒有辦法使這項工作與EF?

回答

0

很多問題都與這個問題有關。他們沒有討論EF與NHiberate等的優缺點,但是用EF創建一個非常通用的數據訪問層是非常容易的。

http://elegantcode.com/2009/12/15/entity-framework-ef4-generic-repository-and-unit-of-work-prototype/

Generic repository implementation with EF

Entity Framework Generic Repository

+0

感謝您的鏈接。由於我已經知道如何處理版本庫和UoW,所以後兩個版本沒有多大幫助。但是,從第一篇文章鏈接到「前一篇文章」之後,突出強調了使用EntityConfiguration類添加新映射,這是我不知道的。我會進一步研究,但我不確定這是否符合法案,因爲它似乎需要一個新的背景。我希望能夠實現更多的網關解決方案,其中可以根據需要使用和擴展單個上下文。我會再看看EntityConfiguration。 – SonOfPirate

2

看起來你沒有做正確的研究EF

如果您正在使用EF 4使用CreateObjectSet<T>()方法,類似於 GetTable<T>方法

對於EF 4.1有Set<T>()方法

EF 4.1 code first提供類似於NHibernate的映射。它更接近流利的nhibernate提供的。

+0

其實我已經看到你引用的文章,這裏的關鍵是自定義的DbContext有每次添加新的EntityType時間進行修改。這是我想要避免的。我想要一個可用於任何EntityType的單個上下文(只要該映射是在某處定義的)。 – SonOfPirate

+0

@SonOfPirate您可以使用[EntityTypeConfiguration](http://msdn.microsoft.com/en-us/library/gg696117(v = vs.103))。aspx)映射實體並使用反射來加載這些類,以避免修改上下文。考慮到像xml這樣的外部配置的流暢映射的優點,我不介意修改上下文來添加新的實體。 – Eranga