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
通常可用的属性和方法?
答案 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
约束中的限制。