EntityFramework 映射片段问题

Posted

技术标签:

【中文标题】EntityFramework 映射片段问题【英文标题】:EntityFramework mapping fragments issue 【发布时间】:2020-02-08 16:35:21 【问题描述】:

我正在开发一个 API Web 项目,在 ASP.net 中,根据几个 *** 用户的建议,在描述我的问题后,我决定使用 EntityFramework。

处理已经创建并形成的具有所有关系的数据库。我已经生成了所有对应的实体,并执行了第一个 sql,得到一个小示例 ql,它将返回给定表的所有数据。

但是当我得到查询并执行它时,我得到了错误 3002,描述如下:

错误 3002:从第 12441 行开始映射片段时出现问题:潜在的运行时违反表 propuestaMarca 的键(propuestaMarca.marca、propuestaMarca.propuesta):列(propuestaMarca.propuesta、propuestaMarca.marca)映射到 EntitySet propuestaMarca 的属性(propuestaMarca .propuesta.cod_propuesta、propuestaMarca.marca.cod_marca)在概念方面,但它们不构成 EntitySet 的关键属性(propuestaMarca.marca.cod_marca、propuestaMarca.propuesta.cod_propuesta、propuestaMarca.propuesta.empresa)。

当我查看 .emdx 模型时,我看到以下内容:

模型中不存在表 propuestaMarca。没有正确导出

当我查看 .emdx 模型时,我看到以下内容:

模型中不存在建议的 tableBrand。未正确导出。

我搜索了有关错误3002的信息,我发现从两个表中的一个中删除某个主键可以解决问题,并试图消除propuesta表中的主Empleado键,但它没有工作。

【问题讨论】:

【参考方案1】:

当主键由多个属性(复合键)组合而成时,也会出现此错误。看起来您在 propuesta 表中有两个“键”。

从上面的错误信息来看:

(propuestaMarca.propuesta, propuestaMarca.marca) -> 2 列

映射到EntitySet propuestaMarca的属性

(propuestaMarca.propuesta.cod_propuesta, propuestaMarca.marca.cod_marca) -> 2 列

在概念方面,但它们不构成 EntitySet 的关键属性

propuestaMarca.marca.cod_marca、propuestaMarca.propuesta.cod_propuesta、propuestaMarca.propuesta.empresa)。 -> 3 列

所以我认为你应该检查映射。

【讨论】:

我看到了映射的问题,它使用 cod_propuesta、cod_marca 和 empresa,这是通过在模型中生成与数据库相关的所有内容来自动完成的。无法删除主键empresa,在数据库中是必须的。 您可以尝试右键单击 .emdx 的列,看看是否有任何不应检查的实体键。如果一切正常,也许你应该选择所有表并从模型中删除。然后从 db 更新模型并再次添加所有必需的表。 嗨,我的问题是那个表是错误的,删除那个表,解决了我的问题。谢谢。

以上是关于EntityFramework 映射片段问题的主要内容,如果未能解决你的问题,请参考以下文章

使用 libtorrent 下载特定片段

Entity Framework 6 不适用于时态表

Entityframework 6:如何将自定义类型映射到 SQL 表

EntityFramework Core 中的映射继承

使用 entityFramework Automapper .Net Core 的嵌套映射

ExpressMapper / EntityFramework - 没有为此对象定义无参数构造函数