在Devart中使用Code First和Database First Entity Framework

时间:2013-02-25 22:44:57

标签: entity-framework ef-code-first devart ef-database-first

我有一个网站使用EF 4.4(.NET 4.0版本的EF 5.0),它对现有数据库使用Code First。我使用Devart oracle数据提供程序,由于模型类型的外壳问题,需要一种解决方法。

它使Devart提供程序识别小写数据类型以解释模式。 (或者沿着这些方向的东西)

这样可以正常工作,直到此网站上的控件构建在EF 4.1 Database First(也是针对现有数据库)上,试图加载。 Devart提供程序似乎在网站上共享,并且导致提供程序无法在所有大写字母中正确识别数据类型的错误,因为之前的解决方法是使其在Code First中工作。

是否有针对此的解决方法,或者我是否必须将Database First方法转换为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.

还有更多,但他们使用不同的行和数据类型都是相同的错误。

1 个答案:

答案 0 :(得分:2)

  

Devart提供商似乎在网站上共享

设置ColumnTypeCasingConventionCompatibility选项后,它确定当前应用程序域(网站)的行为。该进程(Web服务器)可以运行具有不同ColumnTypeCasingConventionCompatibility值的多个应用程序域。

特定应用程序域的ColumnTypeCasingConventionCompatibility值取决于用于网站中模型的DbContext模板的Fluent Mapping属性。 Fluent Mapping = true必须与ColumnTypeCasingConventionCompatibility = true一起使用,反之亦然:Fluent Mapping = false必须与ColumnTypeCasingConventionCompatibility = false一起使用。

您可以通过以下替代方式为网站设置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>