【问题标题】:Changing Entity accessibility更改实体可访问性
【发布时间】:2012-09-21 01:59:03
【问题描述】:

我想在内部创建一个实体。我已将实体、其标量属性和导航属性更改为内部。当我尝试构建它时出现此错误:

错误 6036:EntityType 'File' 具有 'Internal' 可访问性,而 EntitySet 'Files' 具有具有 'Public' 可访问性的 get 属性。 EntitySet 的 get 属性的访问限制不得少于包含 EntityType 的访问权限。

由于未生成此错误,我无法编辑 Designer.cs。我检查了 edmx 文件,但没有任何与“文件”或“文件”关联的公共值。我该怎么办?

【问题讨论】:

    标签: .net entity-framework


    【解决方案1】:
    1. 在 VS 实体设计器中打开模型。
    2. 切换到模型浏览器窗口。
    3. 展开以下节点:
    • 型号名称.edmx
      • 型号
        • 实体类型
        • 复杂类型
        • 协会
        • EntityContainer:我的实体
          • 实体集
    1. 在“实体集”列表中,您应该会看到“文件”条目。点击它。
    2. 切换到属性编辑器窗口并更改 Getter 可见性。

    【讨论】:

    • 谢谢,成功了。现在我得到了不同的错误:“不一致的可访问性:属性类型'System.Data.Objects.DataClasses.EntityCollection'比属性'BLL.Proje.tblFiles'更难访问”。我检查了 ModelName.edmx > ModelName.Store > Tables/Views > tblFiles 但它没有任何可访问性属性。我手动编辑了设计器代码,但它确实恢复为公开,所以我认为有更合适的方法?
    • 这是 C# 错误,而不是 EDMX 错误。 BLL.Proje.tblFiles 是什么?
    • Proje 是另一个实体。文件实体通过名为“tblFiles”的导航属性与 Proje 相关联。原来我必须更改 Proje 表上 tblFiles 导航属性的访问属性,它现在可以工作了。非常感谢。
    【解决方案2】:

    我无法在模型浏览器中找到“EntityContainer: MyEntities”。我仍然不确定为什么——我的实体设计器和模型浏览器功能齐全,除了这个。因此,我能够直接通过 XML 更改 Getter 可见性。只需使用 XML 编辑器打开 .edmx 文件,然后在“CSDL 内容”部分添加与此类似的 GetterAccess 属性。

    <EntitySet Name="Locations" EntityType="MyComponent.Location" a:GetterAccess="Internal" />
    

    【讨论】:

    • 我也没有 EntityContainer 节点,但是在编辑 XML 之后它出现了!
    • 我知道答案为什么:) 您在浏览器中看不到 EntitySets,因为您首先将容器的可见性更改为 Internal,然后尝试查找 EntitySets(默认情况下是公共的) .这就是他们消失的原因。尝试设置从低级到高级实体的可见性,即 1.entities 2.entity 设置 3.entities 容器
    猜你喜欢
    • 2020-01-13
    • 2018-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-25
    • 1970-01-01
    相关资源
    最近更新 更多