Oracle实体框架,NUMBER(10)错误

时间:2016-07-21 12:20:27

标签: c# oracle entity-framework

我正在使用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?

1 个答案:

答案 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>