我有一个网站使用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.
还有更多,但他们使用不同的行和数据类型都是相同的错误。
答案 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>