gpt4 book ai didi

c# - 带有 Oracle 托管驱动程序的 Entity Framework 将 NUMBER(10) 映射到 long 不起作用

转载 作者:行者123 更新时间:2023-11-30 21:49:16 25 4
gpt4 key购买 nike

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

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

  • package id="EntityFramework"version="6.1.3"
  • package id="Oracle.ManagedDataAccess"version="12.1.24160419"
  • 包 id="Oracle.ManagedDataAccess.EntityFramework"version="12.1.2400"

我的 web.config 为 edmMappings 指定了一个部分。

<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_ID 列在 Oracle 中定义为 NUMBER (10)。

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

我希望生成的模型使用 long。

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

Schema specified is not valid. Errors: \r\nTestMappings2.msl(18,12) : error 2019: Member Mapping specified is not valid. The type 'Edm.Int64[Nullable=True,DefaultValue=]' of member 'LINK_ID' in type 'Model.PROCESS' is not compatible with 'OracleEFProvider.number[Nullable=True,DefaultValue=,Precision=10,Scale=0]' of member 'LINK_ID' in type 'Model.Store.PROCESS'.

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

最佳答案

来自 docs.oracle.com edmMappings 语法似乎已更改为指定最小和最大精度,而不是指定截止点。

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

旧的语法是:

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

关于c# - 带有 Oracle 托管驱动程序的 Entity Framework 将 NUMBER(10) 映射到 long 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37118291/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com