【问题标题】:Does App.config (or ApplicationName.exe.config) work in mono?App.config(或 ApplicationName.exe.config)是否以单声道工作?
【发布时间】:2015-09-25 16:14:32
【问题描述】:

我正在尝试使用 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

在应用启动期间,配置文件被(成功)加载了几次。

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

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

你能告诉我如何摆脱 App.config 中的 provider 部分吗? 我已经设法将几乎所有配置都转移到代码中(提供程序除外)。

【问题讨论】:

    标签: mono app-config devart dotconnect


    【解决方案1】:

    首先,您的例外与错误配置无关。它加载并读取了您的配置,但随后找不到该配置中指定的提供程序 (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),你应该没问题。

    【讨论】:

    • 感谢您的回答。我在程序集加载期间使用 DevArt 的预定义 DbConfiguration 完成了此操作:DbConfiguration.SetConfiguration(new Devart.Data.Oracle.Entity.OracleEntityProviderServicesConfiguration()); 因为在使用属性时出现异常:“默认 DbConfiguration实体框架在发现类型之前使用了实例。"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-26
    • 1970-01-01
    • 1970-01-01
    • 2011-02-17
    相关资源
    最近更新 更多