实体框架 4,POCO:除了 E : class 之外,约束 EF POCO 的更清晰方法?

发布于 2024-10-09 02:14:05 字数 788 浏览 2 评论 0原文

Morshed Anwar 的文章“使用实体框架实现存储库模式” 从他的存储库顶部开始:

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

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

除了 class 之外,是否还有更好的约束,我们可以使用 ASP.NET POCO 实体生成器,用于公开使用 通常可用的 EntityObject 属性和方法,其中 E : EntityObject< /代码>?

Morshed Anwar's article "Implementing Repository Pattern with Entity Framework"
starts off with this at the top of his repository:

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

Say you want to use ASP.NET POCO Entity Generator, you could change EntityObject to class. However, in order to get all the properties of the EntityObject, you would need to use reflection to determine that the class does in fact have all the properties and methods of an EntityObject.

Is there a better constraint other than class we could substitute for EntityObject using ASP.NET POCO Entity Generator to expose the EntityObject properties and methods normally available using where E : EntityObject?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

吲‖鸣 2024-10-16 02:14:05

首先,通用存储库的实现很丑陋(在我看来,CodeProject 总体来说是一个令人失望的好例子来源)。没有两种方法可以解决这个问题。

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

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

优雅的代码>>实体框架 POCO (EF4):通用存储库和工作单元

First of all, that Generic Repository implementation is ugly (CodeProject, in general, has been a disappointing source for good examples in my opinion). There's no two ways around it.

When using POCO Objects, there's really no reason to need to reflect. Take advantage of the EntityContext.CreateObjectSet<T> method and let Entity Framework worry about the details.

If you want to take a look at a much cleaner Generic Repository implementation, check out:

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

夜空下最亮的亮点 2024-10-16 02:14:05

我认为你误解了“POCO”的概念; POCO 代表普通旧 CLR 对象。所以你的 POCO 对象没有任何“正常的属性和方法”。它们只有您赋予它们的属性和方法,这就是重点。

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

I think you mis-understand the concept of "POCO"; POCO stands for Plain Old CLR Object. So your POCO objects don't have any "normal properties and methods". They have only the properties and methods that you give to them, that's the whole point.

Now you could customize your POCO T4 templates and make all of your POCO classes derive from a specific base class, or implement a specific interface if you want. I often have a pattern where all my classes have a public Guid Id property, and so I have a base class which includes this property (and maybe some auditing dates). I then modify the templates to derive my POCO classes from this base class and exclude the Id property from being generated. Given this kind of scenario, I could use by base class as a restriction in the where constraint.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文