如何修改自动生成的Entity Framework DbContext属性?

时间:2014-05-06 15:27:40

标签: c# sql asp.net-mvc entity-framework

我首先使用Entity Framework数据库对我的一个DbContext属性有问题。基本上,我的数据库中有大约25个表,我将其添加到edmx中。然后,edmx在我的DbContext中为每个表生成DbSet。我的问题是,其中一个属性设置为内部,其余所有设置为公共。由于它设置为内部,我不能在另一个程序集中使用它,它也没有初始化,因为EF只初始化公共属性。

我现在已经被黑客攻击了好几天,无法绕过它。为什么一个表设置为内部,所有其他表设置为公共?它们具有相同的属性,我确保在设计器中将其访问级别设置为Public,其关系设置正确 - 我认为此表与另一个表之间没有任何区别。它的孩子也正确。

我尝试将访问级别从Public切换到Internal,再次生成代码,然后将其切换回Public但没有运气。我尝试更改名称,同样的问题。删除和重新添加表有点棘手,因为它有很多关系和依赖关系 - 我必须同时删除一堆表并重新添加它们,否则EF会抱怨。我不想这样做。

非常感谢任何帮助 - 我在这里疯了。

感谢。

1 个答案:

答案 0 :(得分:3)

在EDMX中,您可以为任何属性或导航属性将Setter和Getter设置为Public,Private,Protected或Internal。从模型浏览器中,您可以选择实体及其任何属性,然后在属性窗口中,您可以选择设置Getter和Setter的类型。见下图。
这将使用Visual Studio提供的Model.TT和Context.TT文件进行适当的转换。

如果您想通过XML进行更改,则需要在CSDL中为属性添加适当的a:GetterAccess =“”或:SetterAccess =“”属性

<Property Name="Id" Type="Guid" Nullable="false"  a:GetterAccess="Internal" />

enter image description here