2016-05-09 46 views
1

Oracle 11gデータベースがあります。Oracle管理されたドライバマッピングを使用するEntity Framework NUMBER(10)を長くしても動作しません

私は新しいソリューションと私は、次のNuGetパッケージを追加する新しいプロジェクト(.NET 4.5)を作成:

  • パッケージID = "EntityFramework" バージョン= "6.1.3"
  • パッケージをID = "Oracle.ManagedDataAccess" バージョン= "12.1.24160419"
  • パッケージID = "Oracle.ManagedDataAccess.EntityFramework" バージョン= "2400年1月12日"

私のweb.configファイルがedmMappingsのセクションを指定します。

<oracle.manageddataaccess.client> 
    <version number="*"> 
     <dataSources> 
     <dataSource alias="SampleDataSource" descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL))) " /> 
     </dataSources> 

     <edmMappings> 
     <edmMapping dataType="number"> 
      <add name="int64" precision="10" /> 
     </edmMapping> 
     </edmMappings> 
    </version> 
</oracle.manageddataaccess.client> 

私はその後、databse(モデル最初)からEFデザイナを使用して、新しいADO.NETエンティティデータモデルを追加します。

私はLINK_ID列のテーブルPROCESSを持っています。これはOracleではNUMBER(10)と定義されています。

生成された.edmxファイルとエンティティ(ttファイルを使用して生成)は、マッピングで指定されたlong(Int64)ではなく通常のint(Int32)を使用します。

私は、生成されたモデルが長いものを使用したいと思います。

私は行くとこれを手動で変更するが、その後、私は、実行時に次のエラーを取得することができます:指定

スキーマが有効ではありません。エラー:\ r \ nTestMappings2.msl(18,12): エラー2019:指定されたメンバマッピングが無効です。タイプ のメンバー 'LINK_ID'のタイプ 'Edm.Int64 [Nullable = True、DefaultValue =]' 'Model.PROCESS'は 'OracleEFProvider.number [Nullable = True、DefaultValue =、Precision = 10、スケール= 0]タイプ 'Model.Store.PROCESS'のメンバ 'LINK_ID'の ' 。

生成されたモデルに正しいタイプを使用させるにはどうすればよいのですか。タイプを変更するとランタイムマッピングエラーが発生します。

+0

私はNUMBER(10)の列が含まれていない場合には、Oracle自体への接続が動作しているようだので、私は私の完全な.configファイルが含まれていませんでした誰かが興味があれば投稿することができます。 – Lastwall

答えて

2

docs.oracle.comから、edmMappings構文が変更され、カットオフポイントを指定する代わりに最小値と最大精度が指定されているようです。

<add NETType="int64" MinPrecision="10" MaxPrecision="19" DBType="Number" /> 

古い構文は次のようになります。

<add name="int32" precision="9" /> 
<add name="int64" precision="18" /> 
+0

ありがとう! Googleを介して私は以前のバージョンのドキュメントと、他の場所で見つかったすべての例(ブログ、フォーラム、SO)が古い構文を参照していたことに遭遇しました。 – Lastwall

関連する問題