HCRM博客

遇到EDMX报错,该如何有效解决?

EDMX报错问题详解

一、

Entity Data Model (EDMX) 是用于描述数据模型的XML文件,通常在Entity Framework中使用,EDMX文件包含了概念模型、存储模型和映射信息,使得开发者可以通过代码与数据库进行交互,在使用EDMX文件时,可能会遇到各种错误,本文将详细探讨这些常见错误及其解决方法。

遇到EDMX报错,该如何有效解决?-图1
(图片来源网络,侵权删除)

二、EDMX常见报错及解决方法

1. 表/视图没有定义主键

错误信息:

警告6013: 表/视图'CellularOrders.dbo.V_LINK‘没有定义主键,也无法推断有效的主键,此表/视图已被排除在外,要使用该实体,您需要检查架构,添加正确的键并取消注释。

解决方法:

手动添加主键:在数据库中为视图或表添加一个明确的主键,可以在视图中添加一个Row_Number()列作为主键。

  CREATE VIEW dbo.myView AS
  SELECT ISNULL(CAST((row_number() OVER (ORDER BY tab.ENTRYDATE)) AS int), 0) AS EDMXID, ...other columns go on
  FROM (SELECT COUNT(*) AS [Count], SUM(1) AS [Sum] FROM dbo.myTable) TheViewItself
  INNER JOIN (SELECT TOP 1 Id FROM dbo.TableWithPrimaryKey) Id ON 1 = 1;

自动生成主键:确保表中至少有一列是不可空且不可计算的列,EF将自动将其设为主键。

2. 无法将运行时连接字符串转换为设计时等效项

遇到EDMX报错,该如何有效解决?-图2
(图片来源网络,侵权删除)

错误信息:

从数据库更新模型报错:无法将运行时连接字符串转换为设计时等效项,没有为提供程序“xxxx”。

解决方法:

安装Oracle Data Provider for .NET:如果是Oracle数据库,确保安装了正确版本的Oracle Data Provider。

下载并安装最新版本:如果已安装其他版本,先卸载再重新安装最新版本。

配置连接字符串:确保项目中的连接字符串配置正确,并且与Visual Studio中的配置一致。

3. Visual Studio打开edmx文件不显示表并报错

遇到EDMX报错,该如何有效解决?-图3
(图片来源网络,侵权删除)

错误信息:

没有可用于.edmx的编辑器。

解决方法:

选择正确的设计器:在.edmx文件上右键,选择“ADO.NET 实体数据模型设计器”来打开文件。

安装必要的扩展:确保安装了适用于Visual Studio的必要扩展,如Entity Framework Tools。

4. EF6添加mysql的edmx实体时报错

错误信息:

无法生成模型:“System.Data.StrongTypingException: 表“TableDetails”中列“IsPrimaryKey”的值为 DBNull”

解决方法:

重启MySQL服务:运行services.msc,重启MySQL服务。

执行MySQL命令:在MySQL中运行以下命令:

  use mydbname; set global optimizer_switch='derived_merge=OFF';
  set optimizer_switch='derived_merge=OFF';
  select @@optimizer_switch;
  select @@GLOBAL.optimizer_switch;

重新生成EDMX文件:关闭并重新打开Visual Studio,然后重新生成EDMX文件。

5. VS2019或VS2017连接oracle,打开edmx报错

错误信息:

指定的成员映射无效,类型“NotifyModel.XM_FYTSJL”中的成员“ZT”的类型“Edm.Int16[Nullable=True,DefaultValue=]”与类型“NotifyModel.Store.XM_FYTSJL”中的成员“ZT”的“OracleEFProvider.number[Nullable=True,Precision=2,Scale=0]”不兼容。

解决方法:

更改库版本:确保使用的是兼容的版本,如VS2019应使用19.3版本。

修改DDL生成模板:在模型浏览器中选中实体模型,在属性中把DDL生成模板改成SSDLToOracle.tt (VS),数据库生成工作流改成Generate Oracle Via T4 (TPT).xaml (VS)

EDMX文件在Entity Framework中扮演着重要角色,但在使用过程中可能会遇到各种错误,通过理解这些错误的具体原因并采取相应的解决措施,可以有效地解决问题,确保数据模型的正确性和完整性,希望本文提供的详细解决方案能帮助开发者更好地处理EDMX相关的错误。

四、相关问答FAQs

Q1: 如何手动为视图添加主键?

A1: 可以通过在视图中添加一个Row_Number()列来创建主键。

CREATE VIEW dbo.myView AS
SELECT ISNULL(CAST((row_number() OVER (ORDER BY tab.ENTRYDATE)) AS int), 0) AS EDMXID, ...other columns go on
FROM (SELECT COUNT(*) AS [Count], SUM(1) AS [Sum] FROM dbo.myTable) TheViewItself
INNER JOIN (SELECT TOP 1 Id FROM dbo.TableWithPrimaryKey) Id ON 1 = 1;

Q2: 如何解决EF6添加mysql实体时的StrongTypingException错误?

A2: 可以尝试以下步骤:

1、重启MySQL服务。

2、在MySQL中运行命令:Set global optimizer_switch='derived_merge=OFF';

3、确保连接字符串配置正确,并重新生成EDMX文件。

分享:
扫描分享到社交APP
上一篇
下一篇