2011-09-02 42 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