0

既存のデータベースに対して Code First を使用する EF 4.4 (EF 5.0 の .NET 4.0 バージョン) を使用する 1 つの Web サイトがあります。モデル タイプの大文字と小文字の問題のため、回避策が必要な Devart oracle データ プロバイダーを使用しています。

Devart プロバイダが小文字のデータ型を認識してスキーマを解釈できるようにします。(またはそれらの線に沿った何か)

これは、EF 4.1 Database First (これも既存のデータベースに対して) に基づいて構築されたこの Web サイト内のコントロールが読み込まれるまで、適切に機能します。Devart プロバイダーは Web サイト間で共有されているようで、Code First で機能させるための以前の回避策のために、プロバイダーがすべて大文字のデータ型を (正しく) 認識できないというエラーが発生します。

これに対する回避策はありますか、またはデータベース ファーストのアプローチをコード ファーストに変換する必要がありますか?

編集:関連する回避策のコードは次のとおりです。入手したフォーラムの投稿を紛失したようです。Devartフォーラムにあったと思います:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        var config = Devart.Data.Oracle.Entity.Configuration.OracleEntityProviderConfig.Instance;
        config.Workarounds.ColumnTypeCasingConventionCompatibility = true;

        ... initialization code here ...

        base.OnModelCreating(modelBuilder);
    }

関連するエラーは次のとおりです。

System.Data.MetadataException: Schema specified is not valid. Errors:
Model.ssdl(205,6) : error 0040: The Type CHAR is not qualified with a namespace or alias. Only primitive types can be used without qualification. 
Model.ssdl(206,6) : error 0040: The Type VARCHAR2 is not qualified with a namespace or alias. Only primitive types can be used without qualification.

他にもたくさんありますが、行とデータ型が異なるすべて同じエラーです。

4

1 に答える 1

2

Devart プロバイダーは Web サイト間で共有されているようです

ColumnTypeCasingConventionCompatibilityオプションを設定すると、現在のアプリケーション ドメイン (Web サイト) の動作が決まります。プロセス (Web サーバー) は、ColumnTypeCasingConventionCompatibility の値が異なる複数のアプリケーション ドメインを実行する場合があります。

特定のアプリケーション ドメインのColumnTypeCasingConventionCompatibilityの値は、Web サイトのモデルに使用される DbContext テンプレートの Fluent Mapping プロパティによって異なります。Fluent Mapping=true は ColumnTypeCasingConventionCompatibility=true と共に使用する必要があり、その逆も同様です。Fluent Mapping=false は ColumnTypeCasingConventionCompatibility=false と共に使用する必要があります。

次の代替方法で、Web サイトの ColumnTypeCasingConventionCompatibility を設定できます。

a) コンテキストを最初に使用する前のコード (たとえば、コンテキストの静的コンストラクターまたはプログラムの Main メソッドなど)

b) *.config 内。例えば:

<configuration>
  <configSections>
    <section name="Devart.Data.Oracle.Entity"
    type="Devart.Data.Oracle.Entity.Configuration.OracleEntityProviderConfigurationSection, 
  Devart.Data.Oracle.Entity, Version=7.5.179.0, Culture=neutral, 
  PublicKeyToken=09af7300eec23701" />
   </configSections>
  <Devart.Data.Oracle.Entity xmlns="http://devart.com/schemas/Devart.Data.Oracle.Entity/1.0">
    <CodeFirstOptions ColumnTypeCasingConventionCompatibility="true"/>
  </Devart.Data.Oracle.Entity> 
</configuration>
于 2013-02-26T16:55:21.287 に答える