ODP.net 12c第3版:如何配置在某些情况下映射到bool的数字(1,0)和某些情况下的int16

Moo*_*ozz 2 app-config odp.net entity-framework-6 oracle12c

问题

我有这样一张桌子:

MyModel
MyShortField Number(1,0)
MyBoolField Number(1,0)
Run Code Online (Sandbox Code Playgroud)

我想MyBoolField只存储0和1,但我想MyShortField存储1-9.所以,在EDMX,我定MyBoolFieldBooleanMyShortFieldInt16

我配置这样的映射

<oracle.manageddataaccess.client>
  <version number="*">
    <edmMappings>
      <edmNumberMapping>
        <add NETType="bool" MinPrecision="1" MaxPrecision="1" DBType="Number"/>
        <add NETType="int16" MinPrecision="1" MaxPrecision="5" DBType="Number"/>
      </edmNumberMapping>
    </edmMappings>
  </version>
</oracle.manageddataaccess.client>
Run Code Online (Sandbox Code Playgroud)

它没用.好像我的bool映射被覆盖了int16.有运行时异常

Models.MyTestApp.msl(21,12):错误2019:指定的成员映射无效.类型'Model.MyModel'中成员'MyBoolField'的类型'Edm.Boolean [Nullable = True,DefaultValue =]'与'OracleEFProvider.number不兼容[Nullable = True,DefaultValue =,Precision = 1,Scale = 0 ''成员'MyBoolField'在'Model.Store.MyModel'类型中.

我尝试交换这两行

<add NETType="int16" MinPrecision="1" MaxPrecision="5" DBType="Number"/>
<add NETType="bool" MinPrecision="1" MaxPrecision="1" DBType="Number"/>
Run Code Online (Sandbox Code Playgroud)

这一次,上面的错误消失了,但是出现了新的错误.

Models.MyTestApp.msl(42,12):错误2019:指定的成员映射无效.类型'Model.MyModel'中成员'MyShortField'的类型'Edm.Int16 [Nullable = True,DefaultValue =]'与'OracleEFProvider.number不兼容[Nullable = True,DefaultValue =,Precision = 1,Scale = 0 ''成员'MyShortField'在'Model.Store.MyModel'类型中.

我的短场被布尔映射覆盖了.

有可能做我想做的事吗?我不想在数据库方面做任何改动.

Ste*_*enR 7

像你正在尝试的那样,短片和布尔都不能有NUMBER(1,0)张地图.您将需要专门为bool列使用NUMBER(1,0),并将要映射的列更改为NUMBER(2,0).那么映射将是:

<oracle.manageddataaccess.client>
  <version number="*">
    <edmMappings>
      <edmNumberMapping>
        <add NETType="bool" MinPrecision="1" MaxPrecision="1" DBType="Number"/>
        <add NETType="int16" MinPrecision="2" MaxPrecision="5" DBType="Number"/>
      </edmNumberMapping>
    </edmMappings>
  </version>
</oracle.manageddataaccess.client>
Run Code Online (Sandbox Code Playgroud)

交换映射时错误不同的原因似乎是因为,当存在多个可应用于特定数据库数据类型的映射时,无论哪个最后声明优先级.