0

我有一个使用 EF 4.4(EF 5.0 的 .NET 4.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.

还有很多,但它们都是相同的错误,具有不同的行和数据类型。

4

1 回答 1

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>
于 2013-02-26T16:55:21.287 回答