我首先使用实体框架数据库的 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" />
关于c# - 如何修改自动生成的 Entity Framework DbContext 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23498854/