2016-10-04 34 views
0

我有应用asp.net核心网络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) 
     { 
      ... 
     } 
    } 

应用程序启动后,我只能访问一个DBContext。例如,如果我从OracleController调用某种方法,它工作正常,但SqlServerController方法不工作,它们会抛出异常“提供的SqlConnection不指定初始目录或AttachDBFileName。”。如果我首先从SqlServerController调用方法,它的工作方式是相同的。

+0

你有一个基地DbContext你的数据库上下文?我的意思是一个父母班。 –

+0

两者都从DbContext继承; public class OracleDbContext:DbContext {...} – Stopee

+0

好吧,您没有自定义父类。我认为你需要检查你的ConfigureServices方法,我有这个配置Sql Server DbContext:services.AddEntityFrameworkSqlServer()。AddDbContext (); –

回答

0

正如您在错误消息中看到的,您的连接字符串中缺少InitialCatalog属性。这需要指定EntityFramework应该连接到哪个数据库并启动查询。

+0

我的连接字符串中有InitialCatalog – Stopee

+0

您能告诉我您正在使用的连接字符串吗? – Alex

+0

data source = ****; initial catalog = ****; user id = ****; password = ****; MultipleActiveResultSets = True; App = EntityFramework; – Stopee