You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VS2017通过“从数据库更新模型”添加Oracle表时遇“mapping fragments”错误

解决EDMX更新时的"mapping fragments"错误

针对你在VS2017中更新EDMX模型时遇到的这个问题,我之前处理过类似的场景,大概率是EF的模型映射和数据库结构的匹配出了点小问题,给你几个可行的排查和解决步骤:

1. 确认新表的主键定义是否准确

你提到把关联REQUESTS.REQUEST_ID的列设为主键,这里要仔细核对:

  • 确保ATTACHMENTS_UNSUBMITTED表的主键确实是REQUEST_ID(如果是复合主键,要保证所有主键列都在数据库中有明确的主键约束)
  • 数据库中该主键约束是独立存在的,而非仅依赖外键关联

可以用这条SQL再次验证约束情况:

SELECT CONSTRAINT_NAME, CONSTRAINT_TYPE, COLUMN_NAME
FROM USER_CONSTRAINTS
JOIN USER_CONS_COLUMNS ON USER_CONSTRAINTS.CONSTRAINT_NAME = USER_CONS_COLUMNS.CONSTRAINT_NAME
WHERE USER_CONSTRAINTS.TABLE_NAME = 'ATTACHMENTS_UNSUBMITTED';

要能看到明确标记为PRIMARY KEY的约束,且对应的列是REQUEST_ID。

2. 清理EDMX的缓存文件

有时候VS的EDMX会缓存旧的模型结构,导致更新时出现冲突:

  • 先关闭VS2017,找到项目中EDMX文件对应的.edmx.diagram和.edmx.sqlce(如果存在的话),先备份再删除
  • 重新打开VS,右键EDMX选择「从数据库更新模型」,只勾选ATTACHMENTS_UNSUBMITTED表重试

3. 手动修复EDMX的XML映射

如果自动更新还是报错,可以手动编辑EDMX的XML内容来修正映射:

  • 右键EDMX文件,选择「打开方式」→「XML编辑器」
  • 找到<edmx:StorageModels>部分,确认ATTACHMENTS_UNSUBMITTED的实体定义包含正确的主键配置:
    <EntityType Name="ATTACHMENTS_UNSUBMITTED">
      <Key>
        <PropertyRef Name="REQUEST_ID" />
      </Key>
      <Property Name="REQUEST_ID" Type="int" Nullable="false" />
      <!-- 其他列的定义 -->
    </EntityType>
    
  • 再找到<edmx:ConceptualModels>部分,确保概念模型里的实体与存储模型主键一致,外键关联也正确:
    <Association Name="FK_REQ_ID">
      <End Role="REQUESTS" Type="YourModelNamespace.REQUESTS" Multiplicity="1" />
      <End Role="ATTACHMENTS_UNSUBMITTED" Type="YourModelNamespace.ATTACHMENTS_UNSUBMITTED" Multiplicity="0..1" />
      <ReferentialConstraint>
        <Principal Role="REQUESTS">
          <PropertyRef Name="REQUEST_ID" />
        </Principal>
        <Dependent Role="ATTACHMENTS_UNSUBMITTED">
          <PropertyRef Name="REQUEST_ID" />
        </Dependent>
      </ReferentialConstraint>
    </Association>
    
  • 保存XML后,重新生成项目,再验证模型是否正常。

4. 检查EF版本与Oracle驱动的兼容性

VS2017常用的EF版本(多为EF6)和Oracle数据访问驱动(比如ODP.NET)之间可能存在兼容性问题:

  • 确认你的Oracle驱动是最新的稳定版本(比如ODP.NET Managed Driver)
  • 检查项目中EF的版本是否与驱动兼容,可尝试将EF更新到6.4.4这类稳定版本

补充说明:"mapping fragments"错误通常是因为EF无法将数据库表结构正确映射到概念模型,常见于主键缺失、外键关联不明确、模型缓存冲突这几种情况,按上面的步骤逐一排查基本能解决问题。

内容的提问来源于stack exchange,提问作者user2505177

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:49:41