7

Oracle 10g データベースで EF 4 (データベースが最初で、そこから完全に生成されたモデル) を使用していますが、1 つのフィールドに問題があります。

私のフィールドはデータベースで として定義されてNUMBER(5)います。私のモデルでは、EF はそれをshort. 私の問題は、いくつかの値が 32,767 (最大で short) より大きいことです。この投稿を見つけました: Entity Framework は int の代わりに short を生成します。指示に従うとうまくいきます。私のモデルには Int32 値が含まれるようになりました。

しかし、私は新しい問題を抱えています:

Error 2019: Member Mapping specified is not valid. The type 'Edm.Int32[Nullable=True,DefaultValue=]' of member 'XX' in type 'Model.XXX' is not compatible with 'OracleEFProvider.number[Nullable=True,DefaultValue=,Precision=5,Scale=0]' of member 'XX' in type 'Model.Store.XXX'.

このエラーは、Visual Studio の [エラー リスト] タブに常に表示されます。ただし、ビルドは成功し、半分は機能します。

  • データベースの値を読み取る
  • 値を書き込めません: 99999 は -31073 に変換されました (編集を参照)

両方の方法で機能させる解決策はありますか?

ところで、Oracle INTEGER フィールドに int32 を使用するようにエンティティに指示する方法はありますか? デフォルトでは 10 進数を使用します。

編集

段階的にデバッグしているときに、値が -31073 である理由がわかりました。この行を忘れました:

dao.Value = (short)dto.Value;

私の 2 つの値は int でしたが、要するに暗黙の変換が原点でした。

4

2 に答える 2

7

エラーを削除する方法を見つけました。

edmx ファイルを xml モードで編集したところ、ssdl セクションに自分のフィールドが見つかりました。

<Property Name="SIT_INSEE" Type="number" Precision="5" />

を削除するPrecision="5"と、警告が消えました。

于 2012-12-05T09:17:04.097 に答える
1

他の誰かが同様の問題を抱えている場合に備えて、私の2セントを追加するだけです. 以下を web.config のマッピングに追加し、edmx モデルを最初から再作成 (削除してデータベースから再生成) すると、これらの問題の一部が解決されることに気付きました。web.config に値を追加するだけでは何も解決されませんでした (おそらく、舞台裏でコードの一部を再生成することが私の推測です)。

  <oracle.dataaccess.client>
    <settings>
      <add name="int32" value="edmmapping number(9,0)" />
    </settings>
  </oracle.dataaccess.client>
于 2013-10-03T15:24:47.047 に答える