2015-09-25 4 views
1

Я пытаюсь получить EntityFramework 6 с dotConnect для Oracle, работающим над Mono. У меня также есть вся конфигурация приложения, определенная в разделе userSettings.Работает ли приложение App.config (или ApplicationName.exe.config) в моно?

Первое, что я заметил, что мое приложение всегда по умолчанию конфигурации, а затем я попытался сделать провайдер Devart.Data.Oracle работы, но я получил сообщение об ошибке:

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

я проверил мое приложение с Трассирования и использование MONO_LOG_LEVEL:

MONO_LOG_LEVEL=debug mono Host.exe | grep config 

и конфигурационный файл загружается (успешно) пару раз во время запуска приложения.

Я нашел несколько сообщений об ошибках конфигурации в моно, но они довольно старые, и я не знаю, все еще актуально.

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

Не могли бы вы дать мне подсказку, как избавиться от раздела поставщика в App.config? Мне удалось переместить почти всю конфигурацию в код (кроме поставщиков).

ответ

0

Во-первых, ваше исключение не связано с неправильной конфигурацией. Он загружается и читает вашу конфигурацию, но тогда он не может найти поставщика (Devart.Data.Oracle), указанного в этой конфигурации. Наиболее очевидной причиной этого является отсутствие dll, который содержит этот провайдер.

Во-вторых, это то, как я использую поставщика PostGreSQL Ef6 + DevArt (в использовании 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 {} 

Просто заменить поставщиков PostGreSQL с Oracle в коде выше (и не забудьте добавить DLL отсутствующий, если это имеет место), и вы должны быть хорошо.

+0

Спасибо за ответ. Я сделал предопределенный DBConfiguration это с помощью DevArt во время сборки загрузки: ** DbConfiguration.SetConfiguration (новый Devart.Data.Oracle.Entity.OracleEntityProviderServicesConfiguration()); ** потому, что при использовании атрибута я получил исключение: «по умолчанию DBConfiguration The экземпляр был использован платформой Entity Framework до того, как тип был обнаружен ». – smokeing