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

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

我首先使用实体​​框架数据库的 DbContext 属性之一遇到问题。基本上,我的数据库中有大约 25 个表,我将它们添加到了 edmx.txt 文件中。然后,edmx 在我的 DbContext 中为每个表生成 DbSet。但我的问题是,其中一个属性设置为内部,其余所有属性设置为公共(public)。由于它设置为内部,我无法在另一个程序集中使用它,并且它也未初始化,因为 EF 仅初始化公共(public)属性。

我已经研究这个问题好几天了,但无法全神贯注。为什么一张表设置为内部,而所有其他表设置为公共(public)?它们具有相同的属性,我确保其访问级别在设计器中设置为“公共(public)”,其关系设置正确 - 我发现此表和另一个表之间没有任何不同。它的子项也设置正确。

我尝试将访问级别从公共(public)切换到内部,再次生成代码,然后将其切换回公共(public),但没有成功。我尝试更改名称,同样的问题。删除和重新添加表有点棘手,因为它有很多关系和依赖关系 - 我必须同时删除一堆表并重新添加它们,否则 EF 会提示。我宁愿不必这样做。

非常感谢您的帮助 - 我快要疯了。

谢谢。

最佳答案

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

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

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

enter image description here

关于c# - 如何修改自动生成的 Entity Framework DbContext 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23498854/

相关文章:

jquery $.Post 不会改变 View 。我该怎么办?

c# - 在 Entity Framework 中从 DbContext 生成数据脚本

c# - 在数据库中存储和解析 bool 表达式

c# - 如何在 Silverlight 中制作顶部(或底部)圆角矩形?

sql - 如何使用 Oracle SQL 查找一个月的第一个星期四?

asp.net - 预编译 ASP.NET 网页 Razor (*.cshtml) 文件

c# - 如何为返回 IEnumerable 的方法编写拦截器

php - 使用查询语言、mysql、php 更新行

mysql - 如何在 GROUP BY 查询中为每个组返回特定​​列的最频繁值?

c# - 在 UnitTest Mock-DbContext 上使用