带有 ADO.NET Entity Framework 的内部类

Posted

技术标签:

【中文标题】带有 ADO.NET Entity Framework 的内部类【英文标题】:Internal classes with ADO.NET Entity Framework 【发布时间】:2011-01-31 09:28:57 【问题描述】:

我正在使用实体框架来创建我的数据访问层,我希望我的所有类都是internal

我知道可以在设计器中为每个类手动分配它。

更新 我发现我最初的陈述

但是看起来它还需要为每个类中的每个属性设置内部修饰符!我有大约 30 多个实体,这将是一项艰巨的工作。

不正确。我错过了当我在Entity Type 上设置访问权限时,我还需要在Entity Set 上设置适当的访问权限。

您知道如何为整个模型设置“默认访问”吗?

【问题讨论】:

【参考方案1】:

您到底想达到什么目的?如果你的模型中的每个类都被声明为内部的,并且它的所有属性都被声明为内部的,那么你的模型就会变得毫无用处。有些东西需要访问它并在某个时候使用它......

您是否试图阻止该模型的特定用途?有更好的方法来做到这一点。

更新: 看起来 VS2010 将允许内部 ObjectContext 通过 T4 模板。看看这里:http://blogs.msdn.com/efdesign/archive/2009/01/22/customizing-entity-classes-with-t4.aspx

【讨论】:

通过此DataAccess 库的设计类只能由另一个非常特殊的Model 程序集使用。我将在DataAccess 中有InternalsVisibleTo 属性,所以只有Model 可以使用它的类。 如果您需要将它们标记为内部,您将不得不手动修改设计器文件。如果您的模型永远不会改变,那并不是真正的问题......但如果它改变,您可能会遇到设计器文件(自动生成)覆盖您的更改的情况。如果你可以使用 2010,看起来 T4 模板可以让你实现你所追求的(blogs.msdn.com/efdesign/archive/2009/01/22/…)【参考方案2】:

实际上,如果您的类是内部的,则属性是否公开并不重要 - 类本身在您的项目之外是不可见的,因此永远无法访问属性(除非通过反射)

【讨论】:

是的,但我发现我的问题是因为我错过了如果我在 Entity Type 上设置内部可见性,那么我还需要至少在 Entity Set 上设置内部可见性。 但不幸的是我还没有找到在EntityContainer级别设置可见性的方法。 通过使用 CodeFirst 方法,您可以完全控制您的模型。

以上是关于带有 ADO.NET Entity Framework 的内部类的主要内容,如果未能解决你的问题,请参考以下文章

ADO.NET Entity Framework 如何查看T

ADO.NET Entity Framework 和 NHibernate - 何时使用其中之一

ADO.NET Entity Framework -Code Fisrt 开篇

ADO.NET Entity Framework 的实际好处是啥?

ADO.NET Entity Framework 和标识列

ado.net entity framework无法更新数据库