2016-10-04 27 views
0

私が持っている2つのコントローラとアプリのasp.netコアウェブAPIアプリ 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) 
     { 
      ... 
     } 
    } 

アプリの起動後、私は1つのDBContextにしかアクセスできません。たとえば、OracleControllerからいくつかのメソッドを呼び出すと、正常に動作しますが、SqlServerControllerのメソッドは「提供されたSqlConnectionが初期カタログまたはAttachDBFileNameを指定していません」という例外をスローしません。最初のSqlServerControllerからメソッドを呼び出すと、同じ方法で動作します。

+0

DBコンテキスト用の基本DbContextはありますか?私は親クラスを意味する。 –

+0

両方ともDbContextから継承します。 public class OracleDbContext:DbContext {...} – Stopee

+0

OK、カスタム親クラスはありません。私はConfigureServicesメソッドを見直す必要があると思います.Sql Server DbContextを設定するためにこれを持っています:services.AddEntityFrameworkSqlServer()。AddDbContext (); –

答えて

0

エラーメッセージでわかるように、接続文字列にはInitialCatalogプロパティがありません。これは、EntityFrameworkがクエリを接続して起動するデータベースを指定するために必要です。

+0

接続文字列にInitialCatalogがあります – Stopee

+0

使用している接続文字列を表示できますか? – Alex

+0

データソース= ****;初期カタログ= ****;ユーザーID = ****;パスワード= ****; MultipleActiveResultSets = True; App = EntityFramework; – Stopee

関連する問題