我正在使用Entity Framework 6.1.3和Oracle数据库。我在数据库中有一个数字(10)字段,它自动映射到int32。但是这个字段的最大值可以是9.999.999.999,这对于int32来说很大。因此我在app.config中添加了自己的映射:
<oracle.manageddataaccess.client>
<version number="*">
<edmMappings>
<edmNumberMapping>
<add NETType="int64" MinPrecision="10" MaxPrecision="19" DBType="Number" />
</edmNumberMapping>
</edmMappings>
<dataSources>
<dataSource alias="SampleDataSource" descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL))) " />
</dataSources>
</version>
但是自从我这样做以后,只要执行使用EF的第一个操作,我就会得到一个异常:
An unhandled exception of type '...' occurred in DataAccessLayer.dll
Additional information: Schema specified is not valid. Errors:
Model.PatModel.msl(2778,12) : error 2019: Member Mapping specified is not valid. The type 'Edm.Int64[Nullable=True,DefaultValue=]' of member 'MIN_OUTPUTQUANTITY' in type '...' is not compatible with 'OracleEFProvider.number[Nullable=True,DefaultValue=,Precision=10,Scale=0]' of member 'MIN_OUTPUTQUANTITY' in type '...'.
Model.PatModel.msl(2784,12) : error 2019: Member Mapping specified is not valid. The type 'Edm.Int64[Nullable=True,DefaultValue=]' of member 'MAX_OUTPUTQUANTITY' in type '...' is not compatible with 'OracleEFProvider.number[Nullable=True,DefaultValue=,Precision=10,Scale=0]' of member 'MAX_OUTPUTQUANTITY' in type '...'.
如何使用NUMBER(10)作为Int64 / long?
答案 0 :(得分:0)
您(和我的)问题是2.147.483.647和9.999.999.999之间的数字不适合标准的int32映射。
我将此行添加到App.config中,并从edmx重新生成所有内容:
<oracle.manageddataaccess.client>
<version number="*">
<edmMappings>
<edmNumberMapping>
...
<add DBType="Number" NETType="int64" MinPrecision="10" MaxPrecision="10" />
</edmNumberMapping>
</edmMappings>
</version>
</oracle.manageddataaccess.client>