EF6 数据库首先用于 Oracle 有时不会为 table 生成 class

EF6 database first for Oracle sometimes not generating a class for a table

我正在使用 Visual Studio 2013 和 Entity Framework 6.1.3 针对旧版 Oracle 12c 数据库生成数据库优先 EDMX 模型。我遇到的问题是,对于某些 table,只生成 table 的存储模型定义,但它应该同时生成存储模型定义和概念模型定义。没有概念模型定义,C# 类 不会生成,所以我不能使用 table。

关于我正在使用的工具的信息:

这几天我一直在想办法解决这个问题。我只在网络上发现了一个报告的实例,它甚至接近于发生在我身上的事情 (https://www.codeproject.com/Questions/1102413/EF-doesnt-add-all-tables-in-conceptual-model),但没有针对该问题的报告解决方案。

我正在尝试添加 table 的 EDMX 当前拥有大约四十个 table 定义。有趣的是,我可以创建一个单独的空 EDMX 文件,有时可以成功添加我的问题 tables,但并非总是如此。我正在考虑在单独的 EDMX 中为我的 table 生成定义,然后将它们复制到原始 EDMX,但我不确定我是否会成功包含所有必要的标记,尤其是在尝试包含时其他 table 之间的导航链接。此外,每次我遇到有此问题的 table 时都必须这样做,这太可怕了。

针对 EF 问题的各种解决方案 "Run the Custom Tool",但由于缺少概念模型信息,这在这种情况下不起作用。

感谢您的帮助。

我终于明白是怎么回事了。其中一个 "problem" table 实际上不是问题,只是我对 Entity Framework 工作原理的误解。此 table 是一个纯联接 table,只有两列:一列指向 table A,另一列指向 table B。Entity Framework 不会生成class 用于纯连接 table。相反,它只是将其转换为两个连接的 table 的 class 上的导航链接(class A 和 class B)。

第二个 table 的问题是真实的,是由数据库中不匹配的列定义引起的。外键定义的一侧有一个 NUMBER(18) 类型的列,另一侧有一个 NUMBER(22) 类型的列。 EF 正在将 NUMBER(18) 转换为长整数,将 NUMBER(22) 转换为十进制。 EF 显然不喜欢在其导航链接的末端使用不同的 C# 类型。

为了解决这个问题,我修改了我的 EDM 号码映射(参见 https://docs.oracle.com/cd/E56485_01/win.121/e55744/entityDataTypeMapping.htm#BABGBJCI),以便 NUMBER(18) 和 NUMBER(22) 都解析为长。然后,我从 EF Designer 中删除了我的所有 table 定义,并删除了它们 re-added ,以便重新生成我的所有字段类型。我想我也可以通过修复数据库中不匹配的类型来解决这个问题,但我在另外几十个地方发现了同样的问题,所以我选择了代码解决方案。