EF множественный конструктор со строкой соединения, использующей контейнер единиц: «Основной поставщик не удалось открыть» - PullRequest
3 голосов
/ 07 марта 2020

Я использую EF 6 и контейнер Юнит. когда я не инициализирую конструктор dbcontext по умолчанию, то единство не может распознать контроллер инъекции. но когда инициализируется конструктор dbcontext по умолчанию, и я использую

Database.SetInitializer <<code>EfDbContext> (null) ;

в это время он выбрасывает «Не удалось открыть базовый поставщик при открытии» и Невозможно прикрепить файл Migrations.EfDbContext.mdf Db Ошибка миграции

public EfDbContext() : base()
{
    Database.SetInitializer<EfDbContext>(null);
}

public EfDbContext(string connectionString) : base(connectionString)
{
   Database.SetInitializer<EfDbContext>(null);
}

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
   modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}

Звонок из службы

public JsonResult Something()
{
    using (var db = new EfDbContext("con1"))
    {
        db.Database.Connection.Open();
        var data = db.Database.SqlQuery<Something>("SELECT * FROM [dbo].[Table]").ToList();
        db.Database.Connection.Close();
    }
    ..............
}

и UnityConfig

public static void RegisterComponents()
{
    var container = new UnityContainer();

    container.RegisterType(typeof(IService<>), typeof(Service<>));
    ConventionRegistrar.Configure(container);

    GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container);
}

1 Ответ

1 голос
/ 08 марта 2020

Пожалуйста, попробуйте ..

public EfDbContext() : this("Pass Your Default Connection String")
{

}

public EfDbContext(string connectionString) : base(connectionString)
{

}
//DBSet's

protected override void OnModelCreating(DbModelBuilder modelBuilder)  
{

 base.OnModelCreating(modelBuilder);

 Database.SetInitializer<ApplicationDbContext>(null);

 modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();

 //... Fuluent api
}

Надеюсь, это будет работать.

...