我有一个特定的场景,我想知道实体框架是否(以及如何)可以解决。
我正在开发一个新解决方案的框架,该解决方案将传递给许多开发人员,以便随着时间的推移进行扩展和增强。我想提供一个简单的数据访问层,他们可以从他们正在实现的域层中利用它,而不需要他们对数据访问代码进行更改。我正在研究不同的工具,比如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一起工作?
答案 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创建一个非常通用的数据访问层。