【问题标题】:How do I modify an auto-generated Entity Framework DbContext Property?如何修改自动生成的实体框架 DbContext 属性?
【发布时间】:2014-05-07 08:32:23
【问题描述】:

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

我这几天一直在研究这个问题,但我无法完全理解它。为什么一个表设置为内部而所有其他表设置为公共?它们具有相同的属性,我确保它的访问级别在设计器中设置为 Public,它的关系设置正确 - 我看不出这个表和另一个表之间没有什么不同。它的子节点也设置正确。

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

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

谢谢。

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-30
      • 2012-05-30
      • 2018-01-03
      • 1970-01-01
      • 2012-10-26
      相关资源
      最近更新 更多