EF6 et de multiples configurations (SQL Server et SQL Server Compact)

Mise à jour: Problème résolu, voir à la fin de cette question.

Le problème:

Nous essayons d'utiliser Entity Framework 6 et le code de configuration basée sur un scénario, nous avons utiliser un Serveur SQL server et SQL Server CE, dans la même AppDomain.

Très simple scénario ne semble pas être pris en charge "par la conception". De l'équipe EF:

Remarque: Nous ne soutenons pas le fait d'avoir plusieurs classes de configuration utilisés dans
le même domaine d'application. Si vous utilisez cet attribut pour définir les différents
les classes de configuration pour les deux contextes, une exception sera levée.

Plus d'informations ici: À base de Code de Configuration (Codeplex)

La question:

Comment pouvons-nous aller de l'avant? Toute aide serait grandement appréciée! Est-il une façon plus flexible pour connecter une configuration à un contexte, au lieu d'un AppDomain?

(Notre contexte, les classes sont situés dans les différentes assemblées. Nous avons essayé le DbConfigurationType attribut, mais le problème est EF lui-même)

Fichiers de Configuration:

De Configuration pour SQL server normal

public class EfConfiguration : DbConfiguration
{
    public EfConfiguration()
    {
        SetProviderServices(
            SqlProviderServices.ProviderInvariantName, 
            SqlProviderServices.Instance);

        SetDefaultConnectionFactory(new SqlConnectionFactory());
    }
}

De Configuration pour SQL Server Compact Edition

public class EfCeConfiguration : DbConfiguration
{
    public EfCeConfiguration()
    {
        SetProviderServices(
            SqlCeProviderServices.ProviderInvariantName,
            SqlCeProviderServices.Instance);

        SetDefaultConnectionFactory(
            new SqlCeConnectionFactory(SqlCeProviderServices.ProviderInvariantName));
    }
}

Mise à JOUR:

L'erreur qui nous est:

Système.TypeInitializationException : L'initialiseur de type pour
'MyProject.Les référentiels.De la Base.DataContext'
a déclenché une exception. ----> Système.InvalidOperationException : Un
exemple de "EfCeConfiguration" a été définie, mais ce type n'était pas
découvert dans la même assemblée que le "DataContext" contexte. Soit
mettre le DbConfiguration type dans la même assemblée que les DbContext
type, l'utilisation DbConfigurationTypeAttribute sur le DbContext type de
spécifiez le DbConfiguration type, ou de définir la DbConfiguration type dans
le fichier de configuration. Voir http://go.microsoft.com/fwlink/?LinkId=260883 pour
de plus amples informations.

Mise à JOUR 2, la solution
Comme décrit ci-dessus, nous ne pouvons avoir une configuration. C'est un problème depuis Sql et SqlCe utilise différents fournisseurs. Si nous utilisons la "SetDefaultConnectionFactory" pour s'adapter à un type de base de données, l'autre échoue.

Au lieu de cela, la fourniture de la connexion dans le contexte décrit dans le post marqué comme réponse ci-dessous. Une fois que vous toujours initialiser le contexte, avec une connexion par opposition à un connectionstring vous êtes bon pour aller. Vous pouvez supprimer le SetDefaultConnectionFactory appel de la configuration. Nous utilisons uniquement le code ci-dessous pour la configuration de la SqlCe Contexte et pas de configuration pour Sql Contexte.

  public class CommonEfConfiguration : DbConfiguration
    {
        public CommonEfConfiguration()
        {
            //EF does not know if the ce provider by default,
            //therefore it is required to be informed about it.
            //The connection factories are not necessary since the connection
            //is always created in the UnitOfWork classes
            SetProviderServices(SqlCeProviderServices.ProviderInvariantName, SqlCeProviderServices.Instance);
        }
    }
  • Je suis un peu confus -- j'ai deux bases de données dans deux projets C# (assemblées), chacune avec leur propre configuration et n'ai jamais eu aucun problème que ce soit.
  • Kirk: Êtes-vous à l'aide de EF6 et ne vous exécutez dans la même Application-Domaine? Nous utilisons nunit et effectuez un test d'intégration entre les deux systèmes, mais l'exécution de l'une. A bien fonctionné dans EF5 où l'on n'a pas à spécifier le fournisseur de configuraton.
  • Oui, et oui. Quelle erreur vous rencontrez?
  • Découverte de la DBConfiguration si elle est utilisée est la question. Peut-être que votre scénario de toutes pièces dans l'assemblage correct de la fonction de découverte automatique. Si DBConfig classes sont dans le même assembly 🙁 devient méchant
  • Me donne de l'espoir que vous avez résolu ce! 🙂 J'ai posté le message d'erreur dans une mise à jour en question.
  • la différence est que ma configuration est contenue dans la même assemblée que mon contexte de données. Est-il une raison pour laquelle vous ne pouvez pas le faire?
  • Problème résolu! Le problème était que nous étions en train de créer DbContext avec connectionstrings qui n'a pas de paires bien avec un singleton connectionFactory quand vous voulez les connexions à Sql et SqlCe. Au lieu de cela nous allons créer maintenant le DbContext l'envoi dans les connexions particulières. Désormais, la configuration des usines peuvent être supprimés.
  • J'ai exactement le même problème, mais entre mssql et mysql. J'essaie d'appliquer votre solution, mais MySqlEFConfiguration semble différent
  • saviez-vous qu'il fonctionne d'une certaine façon, je suis en cours d'exécution dans exactement le même problème avec mssql & mysql?
  • C'était il y a longtemps, mais je me souviens que je devais revenir en arrière EF5