C# 将Oracle托管驱动程序编号(10)映射到long的实体框架不起作用
我有一个现有的Oracle 11g数据库 我创建了一个新的解决方案和一个新的项目(.net 4.5),并向其中添加了以下NuGet软件包: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
- package id=“EntityFramework”version=“6.1.3”
- 软件包id=“Oracle.ManagedDataAccess”version=“12.1.24160419”
- package id=“Oracle.ManagedDataAccess.EntityFramework”version=“12.1.2400”
<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的连接似乎正常,但如果有人感兴趣,我可以发布它。谢谢!通过谷歌,我偶然发现了旧版本的文档,我在其他地方(博客、论坛等)找到的所有示例都引用了旧语法。