App.config(或ApplicationName.exe.config)是否在单声道中工作?

时间:2015-09-25 03:49:03

标签: mono app-config devart dotconnect

我正在尝试使用dotConnect for Oracle在Mono上运行EntityFramework 6。 我还在userSettings部分中定义了所有应用程序配置。

我注意到的第一件事是我的应用程序始终默认配置,然后我尝试让Devart.Data.Oracle提供程序工作,但我收到错误:

System.Configuration.ConfigurationErrorsException: Failed to find or load the registered .Net Framework Data Provider 'Devart.Data.Oracle'.

我使用 strace 并使用MONO_LOG_LEVEL检查了我的应用:

MONO_LOG_LEVEL=debug mono Host.exe | grep config

在app启动期间,配置文件已成功加载(成功)。

我发现很少有关于单声道配置的错误报告,但它们已经很老了,我不知道是否仍然是实际的。

https://bugzilla.xamarin.com/buglist.cgi?quicksearch=ApplicationSettingsBase+

你能否给我一个提示如何摆脱App.config中的提供程序部分? 我已设法将几乎所有配置移动到代码(提供商除外)。

1 个答案:

答案 0 :(得分:0)

首先,您的例外与配置错误无关。它加载并读取您的配置,但是它找不到该配置中指定的提供程序(Devart.Data.Oracle)。最明显的原因是缺少包含该提供程序的dll。

其次,这就是我在没有任何配置文件的单声道上使用EF6 + Devart的postgresql提供程序(你使用Oracle,但应该类似)的方法:

public class PgSqlConfiguration : System.Data.Entity.DbConfiguration
{
    public PgSqlConfiguration()
    {
        SetProviderServices("Devart.Data.PostgreSql", PgSqlEntityProviderServices.Instance);
        SetProviderFactory("Devart.Data.PostgreSql", PgSqlProviderFactory.Instance);
    }
}

然后使用DbConfigurationType属性标记您的上下文:

[DbConfigurationType(typeof(PgSqlConfiguration))]
public partial class YourContext : DbContext {}

在上面的代码中用Oracle替换PostgreSql提供程序(如果是这样的话,不要忘记添加丢失的dll),你应该没问题。