带有 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 开篇