C# 将Oracle托管驱动程序编号(10)映射到long的实体框架不起作用

C# 将Oracle托管驱动程序编号(10)映射到long的实体框架不起作用,c#,.net,oracle,entity-framework,C#,.net,Oracle,Entity Framework,我有一个现有的Oracle 11g数据库 我创建了一个新的解决方案和一个新的项目(.net 4.5),并向其中添加了以下NuGet软件包: package id=“EntityFramework”version=“6.1.3” 软件包id=“Oracle.ManagedDataAccess”version=“12.1.24160419” package id=“Oracle.ManagedDataAccess.EntityFramework”version=“12.1.2400” My we

我有一个现有的Oracle 11g数据库

我创建了一个新的解决方案和一个新的项目(.net 4.5),并向其中添加了以下NuGet软件包:

  • package id=“EntityFramework”version=“6.1.3”
  • 软件包id=“Oracle.ManagedDataAccess”version=“12.1.24160419”
  • package id=“Oracle.ManagedDataAccess.EntityFramework”version=“12.1.2400”
My web.config为映射指定一个节

<oracle.manageddataaccess.client>
    <version number="*">
      <dataSources>
        <dataSource alias="SampleDataSource" descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL))) " />
      </dataSources>

      <edmMappings>
        <edmMapping dataType="number">
          <add name="int64" precision="10" />
        </edmMapping>
      </edmMappings>
    </version>
</oracle.manageddataaccess.client>

然后,我使用数据库中的EF Designer(模型优先)添加一个新的ADO.NET实体数据模型

我有一个表
PROCESS
,其中有一个
LINK\u ID
列,在Oracle中定义为数字(10)

生成的.edmx文件和Entite(通过tt文件生成)使用普通int(Int32)而不是我的映射中指定的long(Int64)

我希望生成的模型使用一个长的

我可以手动进行更改,但在运行时会出现以下错误:

指定的架构无效。错误:\r\nTestMappings2.msl(18,12): 错误:指定的成员映射无效。类型 类型中成员“LINK_ID”的“Edm.Int64[Nullable=True,DefaultValue=]” “Model.PROCESS”与不兼容 'OracleEFProvider.number[Nullable=True,DefaultValue=,精度=10,刻度=0]' 类型“Model.Store.PROCESS”中的成员“LINK_ID”的

如何使生成的模型使用正确的类型?为什么更改类型会导致运行时映射错误?

从中可以看出,映射语法已更改为指定最小和最大精度,而不是指定截止点

<add NETType="int64" MinPrecision="10" MaxPrecision="19" DBType="Number" />

旧的语法是:

<add name="int32" precision="9" />
<add name="int64" precision="18" />


我没有包含完整的.config文件,因为如果我没有包含数字(10)列,与Oracle的连接似乎正常,但如果有人感兴趣,我可以发布它。谢谢!通过谷歌,我偶然发现了旧版本的文档,我在其他地方(博客、论坛等)找到的所有示例都引用了旧语法。