Entity Framework.Смущает DbProviderFactory - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть два поставщика базы данных: SQL Server и MySql.EF смущает DbProviderFactory.EF создает my DbContext и устанавливает фабрику mySql со строкой подключения SQL Server!

Мои строки подключения:

<add name="MsSqlConnection" providerName="System.Data.SqlClient" connectionString="Data Source=myServer;Initial Catalog=MyCatalog;Persist Security Info=True;User ID=user;Password=password"/>
<add name="MySqlConnection" providerName="MySql.Data.MySqlClient" connectionString="Server=server;Database=db;Uid=user;Pwd=password;"/>

Мои контексты:

namespace DAL.EntityFramework.MySql
{
    [DbConfigurationType(typeof(MySqlEFConfiguration))]
    public class MySqlContext: DbContext
    {
        public MySqlContext(string connectionName) : base(nameOrConnectionString: connectionName)
        {
        }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);

            modelBuilder.Configurations.Add(new SomeMap());
        }
    }
}

namespace DAL.EntityFramework.App
{
    public class ApplicationContext : DbContext
    {

        public ApplicationContext(string nameOrConnectionString) : base(nameOrConnectionString)
        {
        }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);

            modelBuilder.Configurations.Add(new SomeMap());
        }
    }
}

enter image description here

На другом проекте все работает, сделал тоже самое

1 Ответ

0 голосов
/ 17 декабря 2018

Это лучшая ошибка в моей жизни!Благодаря Майклу, проблема была в DI (Unity)!Я зарегистрировал свою зависимость:

public static void RegisterTypes(IUnityContainer container)
{
    container.RegisterType<MySqlContext>(new InjectionConstructor("MySqlGlobalConnectionTest"));
    container.RegisterType<ApplicationContext>(new InjectionConstructor("ApplicationConnectionTest"));
    container.RegisterType<MsSqlReadOnlyContext>(new InjectionConstructor("MsSqlApplicationConnection"));
    container.RegisterType<IUnityOfWork, UnityOfWork>();
}

И проблема была в ПОРЯДКЕ реализации!

public class UnityOfWork : IUnityOfWork
    {
        private MySqlContext mySqlContext;
        private ApplicationContext applicationContext;
        private MsSqlReadOnlyContext msSqlReadOnlyContext;

        public UnityOfWork(
             ApplicationContext applicationContext,
             MsSqlReadOnlyContext msSqlReadOnlyContext,
             MySqlContext mySqlContext // <-- When I put on the first place - there is an error of definition of factory!
            )
        {
            this.mySqlContext = mySqlContext;
            this.applicationContext = applicationContext;
            this.msSqlReadOnlyContext = msSqlReadOnlyContext;
        }
}

Это очень странная ошибка.Видимо какая-то проблема с UnityDI

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...