Emotion Wave Tech Blog

福岡にあるエモーションウェーブ株式会社のエンジニアが書いています。

OracleのテーブルからEntity Data Modelを生成した時に型がおかしくなるから困った

VB.NETの話です。 OracleのテーブルからEntity Data Model作る時にPropertyの型が適切にならないという問題の対処メモ。

現在、Visual Basic 2010でADO.NET Entity Frameworkを使用して開発しています。 データベースはOracle 10gです。

で、Visual Studioを使って、物理テーブルからEntity Data Modelを作成したんですが、 NUMBER(5,0)のカラムのEntityのプロパティがInt16になって、32767を超える値を設定・取得できない、という問題発生。 Int16 構造体 (System)

調べると以下の様な記述を見つけました。 ADO.NET Entity Framework and LINQ to Entities

上記を参考にApp.configの<configuration>の下に以下を追記し、Entity Data Modelを再作成するとNUMBER(5,0)のカラムはInt32になりましたー。 NUMBER(5,0)(以上)のPropertyの型はInt32で作ってねって言ってあげとくってことでしょうか。

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

しかし、それでも不安定みたいです。この記述を入れてModel再作成しても、たまにInt16になったりします。 大体もう1回作り直すと大丈夫みたいですが。

実はこの問題の前にNUMBER(1,0)がBooleanになるって問題もあったんですけど、 そん時はDBの型をVARCHAR2(1)にして対応しちゃいました。。。

しかし、ハマるかなーと思ったけど、メンバーに相談しながらやってみたら解決出来ました。 (そのメンバーも全然詳しくは無いんですけどね) やっぱり人に相談、話してみるってのは色々と大切ですね、って改めて実感。