2015-09-25 1 views
1

J'essaye d'obtenir EntityFramework 6 avec dotConnect pour Oracle travaillant sur Mono. J'ai également toute la configuration de l'application définie dans la section userSettings.Est-ce que App.config (ou ApplicationName.exe.config) fonctionne en mono?

La première chose que je remarque est que mon application a toujours la configuration par défaut, alors j'essayé de faire le travail du fournisseur de Devart.Data.Oracle, mais je suis une erreur:

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

J'ai vérifié mon application avec strace et en utilisant MONO_LOG_LEVEL:

MONO_LOG_LEVEL=debug mono Host.exe | grep config 

et le fichier de configuration est chargé (avec succès) deux fois lors du démarrage de l'application.

J'ai trouvé quelques rapports de bogues concernant la configuration en mono, mais ils sont assez anciens et je ne sais pas s'ils sont encore réels.

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

Pourriez-vous me donner une idée comment se débarrasser de la section de fournisseur en App.config? J'ai réussi à déplacer presque toute la configuration vers le code (à l'exception des fournisseurs).

Répondre

0

Tout d'abord, votre exception ne concerne pas une configuration incorrecte. Il a chargé et lu votre configuration, mais il ne peut pas trouver le fournisseur (Devart.Data.Oracle) spécifié dans cette configuration. La raison la plus évidente pour cela est dll manquant qui contient ce fournisseur.

Deuxièmement, voilà comment j'utilise le fournisseur de postgresql de EF6 + Devart (vous utilisez Oracle, mais qui devrait être similaire) sur mono sans aucun fichier de configuration:

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

Ensuite, marquez votre contexte avec DbConfigurationType attribut comme celui-ci :

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

Il suffit de remplacer les fournisseurs de PostGreSQL avec Oracle dans le code ci-dessus (et ne pas oublier d'ajouter dll manquants si tel est le cas) et vous devriez être bien.

+0

Merci pour la réponse. Je l'ai fait à l'aide de DbConfiguration prédéfini DevArt lors du chargement de montage: ** DbConfiguration.SetConfiguration (nouveau Devart.Data.Oracle.Entity.OracleEntityProviderServicesConfiguration()); ** parce que quand je suis arrivé en utilisant l'attribut une exception: « La valeur par défaut DbConfiguration instance a été utilisée par Entity Framework avant la découverte du type. " – smokeing