2016-10-04 4 views
0

У меня есть приложение ядро ​​asp.net Web API приложение с 2 контроллерами OracleController.csASP WEB API множественным DbContext

 [Route("api/[controller]")] 
     public class OracleController : Controller 
     { 
      private readonly OracleDbContext _db; 
      public HeatsController(OracleDbContext context) 
      { 
       _db = context; 
      } 
      ... 
      protected override void Dispose(bool disposing) 
      { 
       if (disposing) 
       { 
        _db.Dispose(); 
       } 
       base.Dispose(disposing); 
      } 
    } 

SqlServerController.cs

 [Route("api/[controller]")] 
     public class SqlServerController: Controller 
     { 
      private readonly SqlServerDbContext _db; 
      public HeatsController(SqlServerDbContext context) 
      { 
       _db = context; 
      } 
      ... 
      protected override void Dispose(bool disposing) 
      { 
       if (disposing) 
       { 
        _db.Dispose(); 
       } 
       base.Dispose(disposing); 
      } 
    } 

Startup.cs

public void ConfigureServices(IServiceCollection services) 
     { 
      services.AddScoped(_ => new OracleDbContext(Configuration["Data:OracleConnectionString"])); 
      services.AddScoped(_ => new SqlServerDbContext(Configuration["Data:SqlServerConnectionString"])); 
     } 

SqlServerDBContext.cs

public class SqlServerConfig : DbConfiguration 
    { 
     public SqlServerConfig() 
     { 
      SetProviderServices("System.Data.SqlClient", 
      System.Data.Entity.SqlServer.SqlProviderServices.Instance); 
     } 
    } 

    [DbConfigurationType(typeof(SqlServerConfig))] 
    public class SqlServerDbContext : DbContext 
    { 
     public SqlServerDbContext() 
      : base("name=SqlServerDbContext") 
     { 
     } 

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

     ... 

     protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 
      ... 
     } 
    } 

После запуска приложения я могу получить доступ только к одному DBC-контексту. Например, если я вызываю какой-то метод из OracleController, он отлично работает, но методы из SqlServerController не работают, они бросают исключение. «В поставляемом SqlConnection не указывается начальный каталог или AttachDBFileName». Он работает так же, если я сначала вызову методы из SqlServerController.

+0

У вас есть базовый DbContext для ваших контекстов db? Я имею в виду родительский класс. –

+0

Оба наследуются от DbContext; Открытый класс OracleDbContext: DbContext {...} – Stopee

+0

Хорошо, у вас нет пользовательского родительского класса. Я думаю, вам нужно просмотреть свой метод ConfigureServices, у меня есть это для настройки Sql Server DbContext: services.AddEntityFrameworkSqlServer(). AddDbContext (); –

ответ

0

Как вы можете видеть в сообщении об ошибке, вам не хватает свойства InitialCatalog в строке подключения. Это необходимо для указания, к какой базе данных EntityFramework следует подключать и запускать запросы.

+0

У меня есть InitialCatalog в моей строке подключения – Stopee

+0

Не могли бы вы показать мне строку соединения, которую вы используете? – Alex

+0

источник данных = ****; начальный каталог = ****; пользователь id = ****; пароль = ****; MultipleActiveResultSets = True; App = EntityFramework; – Stopee

Смежные вопросы