实体框架4,POCO:限制EF POCO的更明确的方式,而不是E:class?

时间:2010-12-21 17:25:35

标签: c# entity-framework-4 poco constraints

Morshed Anwar的文章"Implementing Repository Pattern with Entity Framework" 从他的存储库顶部开始:

public class Repository<E, C> : IRepository<E, C>, IDisposable
    where E : EntityObject
    where C : ObjectContext
{ ... }

假设您要使用ASP.NET POCO实体生成器,可以将EntityObject更改为class。但是,为了获取EntityObject的所有属性,您需要使用反射来确定该类实际上具有EntityObject的所有属性和方法。

class以外,是否有更好的约束我们可以使用ASP.NET POCO Entity Generator代替EntityObject来公开EntityObject使用where E : EntityObject通常可用的属性和方法?

2 个答案:

答案 0 :(得分:3)

首先,Generic Repository的实现很难看(一般来说,CodeProject在我看来是一个令人失望的好例子来源)。围绕它没有两种方法。

使用POCO对象时,没有理由需要反思。利用EntityContext.CreateObjectSet<T>方法让实体框架担心细节。

如果您想查看更清晰的通用存储库实现,请查看:

Elegant Code >> Entity Framework POCO (EF4): Generic Repository and Unit of Work

答案 1 :(得分:1)

我认为你误解了“POCO”的概念; POCO代表Plain Old CLR Object。因此,您的POCO对象没有任何“常规属性和方法”。他们只有你给他们的属性和方法,这就是重点。

现在,您可以自定义POCO T4模板,并使所有POCO类派生自特定基类,或者根据需要实现特定接口。我经常有一个模式,我的所有类都有public Guid Id属性,所以我有一个包含这个属性的基类(可能还有一些审计日期)。然后,我修改模板以从此基类派生我的POCO类,并排除生成Id属性。鉴于这种情况,我可以使用基类作为where约束中的限制。