2

Oracle データベースで EF を使用しています。データベース内の列の 1 つに、Number(1,0) のデータ型があります。このフィールドには、C# で Int16 に変換されるデータが格納されます。Visual Studio のエンティティ データ モデル (EDM) ビルダーは、この列を Bool の既定値としてマップします。これにより、データ型エラーが発生します。私がやりたいことは、bool ではなく常に Int16 フィールドとして number(1, 0) を設定するようにモデル ジェネレーターを構成することです。

どうすればこれを行うことができますか。

また、仲間の開発者が自分のマシンでこのモデルを構築する場合、Int16 (short) として設定されることにも言及したいと思います。私のマシンでそれを行うと、それはブールになります。なぜ一方が他方と異なる結果を表示するのか理解できません。

ありがとう

4

3 に答える 3

2

同様の問題が発生しました。(number(1) をデフォルトの bool から int16 にマップしようとしました)

ODP.net 12.1.24を使用して、oracle11でVS2013でEF6を使用しています。

最終的に、次のセクションを app.config に追加して解決しました。

<oracle.manageddataaccess.client>
  <version number="*">
    <edmMappings>
      <edmNumberMapping>
        <add NETType="int16" MinPrecision="1" MaxPrecision="4" DBType="Number"/>
      </edmNumberMapping>
    </edmMappings>
  </version>
</oracle.manageddataaccess.client>
于 2016-08-03T14:57:52.423 に答える
2

Oracle のプロバイダー (別名 ODAC、ODP.NET、ODT) を使用していると仮定します...

EDMX を含むアセンブリ (設計時) と実行可能アセンブリ (実行時) の両方の app.config ファイルにカスタム マッピング セクションを追加して、既定のマッピングを変更できます。
詳細はこちらをご覧ください。

例えば

<oracle.dataaccess.client>
    <settings>
        <add name="int16" value="edmmapping number(1,0)" />
    </settings>
</oracle.dataaccess.client>

number(1,0) の範囲は -9..9 であるため、int16 やバイトにはあまり適していません(どちらも範囲が広い)。

推奨されるマッピングのリストは、こちらで確認できます。

編集:

新しいマネージド プロバイダーの設定については、こちらの回答を参照してください

于 2012-06-05T19:05:35.403 に答える
-1

この表によると:

http://docs.oracle.com/cd/E11882_01/win.112/e18754/featLINQ.htm

OracleのNmber(1,0)はInt16です

ただし、上記のドキュメントのとおり、「。NET構成ファイルでカスタムマッピングを構成して、Number(p、0)Oracleデータ型のデフォルトのマッピングを上書きできます。たとえば、Number(1,0)、デフォルトではInt16にマップされ、.NETBoolまたは.NETByteタイプにカスタムマップできます。」

構成がどのように見えるかを示しているドキュメントを見てください。

于 2012-06-05T18:51:10.390 に答える