如何用动态概念层实现EF?

时间:2011-09-02 04:22:12

标签: entity-framework entity-framework-4

我有一个特定的场景,我想知道实体框架是否(以及如何)可以解决。

我正在开发一个新解决方案的框架,该解决方案将传递给许多开发人员,以便随着时间的推移进行扩展和增强。我想提供一个简单的数据访问层,他们可以从他们正在实现的域层中利用它,而不需要他们对数据访问代码进行更改。我正在研究不同的工具,比如NHibernate,LINQ-to-SQL,EF以及旧的ADO.NET。

作为我所使用的示例,使用LINQ-to-SQL,域层中的代码将调用GetTable< T>。 L2S DataContext上返回IQueryable< T>的方法。从理论上讲,这意味着DataContext可以解析任何T的请求。当然,实际上,DataContext必须知道如何处理T。

看看EF是如何运作的,我看到了其他工具的一些相似之处,但却无法找到如何实现我的目标。这就是我想要发生的事情:

我提供了一个默认的“上下文”,它暴露了像GetTable< T>这样的方法。 (例如,查询< T>)返回IQueryable< T>。这允许未来的增强,其中T表示尚未实现的EntityType,并且使得开发人员可以容易地关注域层,因为他们需要做的就是调用GetTable< T>。 (或类似的)。

域开发人员的唯一其他要求是提供映射层,其中概念层(T)映射到存储层(物理数据库架构)。

FWIW,我相信NHibernate可以通过映射XML文件轻松完成。有没有办法让这个与EF一起工作?

2 个答案:

答案 0 :(得分:2)

看起来你还没有对EF进行适当的研究

如果您使用的是EF 4,请使用类似于{4}的CreateObjectSet<T>()方法 GetTable<T>方法

对于EF 4.1,有Set<T>()方法

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

答案 1 :(得分: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