2016-11-01 7 views
3

私は、既定のデータベースとは異なるデータベースからモデルのデータの一部を取得するために必要なEntityFrameworkを使用するプロジェクトに取り組んでいます。同じDbContextで複数の接続文字列を使用するにはどうすればよいですか?EntityFrameworkで同じDBContextに複数の接続文字列を使用する

public class HMVoltageDBContext : DbContext, IDisposable// IdentityDbContext<User>, IDisposable 
    { 
     static HMVoltageDBContext() 
     { 
      Database.SetInitializer<HMVoltageDBContext>(new HMVoltageDatabaseInitializer()); 
     } 

     public HMVoltageDBContext() : base(nameOrConnectionString: "HMVoltageDB") { 
      Maps = base.Set<Map>();   
      MapSteps = base.Set<MapStep>(); 
      MapParents = base.Set<MapParents>(); 
      MapTypes = base.Set<MapType>(); 
      PageSizes = base.Set<PageSize>();   
      PreparationPlaces = base.Set<PreparationPlace>(); 
      Products = base.Set<Product>(); 
      ProductCategories = base.Set<ProductCategory>();    
      Statuses = base.Set<Status>(); 
      Steps = base.Set<Step>(); 
      Sets = base.Set<Set>(); 
      MapReceivers = base.Set<MapReceiver>(); 
      Receivers = base.Set<Receiver>(); 

     } 

     protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 
      // Use singular table names 
      modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>(); 
      modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();   
      modelBuilder.Configurations.Add(new MapConfiguration()); 
      modelBuilder.Configurations.Add(new MapParentsConfiguration()); 
      modelBuilder.Configurations.Add(new MapStepConfiguration()); 
      modelBuilder.Configurations.Add(new MapTypeConfiguration());   
      modelBuilder.Configurations.Add(new PageSizeConfiguration()); 
      modelBuilder.Configurations.Add(new PreparationPlaceConfiguration()); 
      modelBuilder.Configurations.Add(new ProductConfiguration()); 
      modelBuilder.Configurations.Add(new ProductCategoryConfiguration()); 
      modelBuilder.Configurations.Add(new StatusConfiguration()); 
      modelBuilder.Configurations.Add(new StepConfiguration()); 
      modelBuilder.Configurations.Add(new SetConfiguration()); 
      modelBuilder.Configurations.Add(new MapReceiverConfiguration()); 
      modelBuilder.Configurations.Add(new ReceiverConfiguration()); 

     } 
     public DbSet<Map> Maps { get; set; } 
     public DbSet<MapParents> MapParents { get; set; } 
     public DbSet<MapReceiver> MapReceivers { get; set; } 
     public DbSet<MapStep> MapSteps { get; set; } 
     public DbSet<MapType> MapTypes { get; set; } 
     public DbSet<PageSize> PageSizes { get; set; } 
     public DbSet<PreparationPlace> PreparationPlaces { get; set; } 
     public DbSet<Product> Products { get; set; } 
     public DbSet<ProductCategory> ProductCategories { get; set; } 
     public DbSet<Receiver> Receivers { get; set; } 
     public DbSet<Status> Statuses { get; set; } 
     public DbSet<Set> Sets { get; set; } 
     public DbSet<Step> Steps { get; set; } 
     public static HMVoltageDBContext Create() 
     { 
      return new HMVoltageDBContext(); 
     } 
     public static void init() 
     { 
      try 
      { 
       Create().Database.Initialize(true); 
      } 
      catch (Exception ex) 
      { 
       throw ex; 
      } 
     } 
    } 

と、この私の接続文字列:以下に示すようにあなたは、接続文字列の名前でDbContextのコンストラクタをオーバーロードすることができます

<connectionStrings> 
    <add name="HMVoltageDB" connectionString="Data Source=.; Database = HMV; User Id=sa; Password=123456; " providerName="System.Data.SqlClient"/> 
    </connectionStrings> 
+0

なぜ2つの異なるものを使用しませんか? – ThatChris

答えて

3

。その後

public class HMVoltageDBContext : DbContext 
    { 
     public HMVoltageDBContext(string nameOrConnectionString) : base(nameOrConnectionString) 
     { 

     } 
    } 

あなたDbContextをインスタンス化するときには、設定された接続文字列または接続文字列の名前を渡すことができます。

var context = new HMVoltageDBContext("you-can-change-conn-at-runtime-here"); 
+0

静的なHMVoltageDBContext()メソッドで何をすればよいですか? –

+0

@JeroenHeier彼は上記の投稿に示されているように設定しなければなりません。 – Sampath

関連する問題