2017-12-04 8 views
0

同じテーブル名を持つ2つのデータベースがあります。エンティティは私に、「エンティティタイプ 『PmsUser』を述べると、InvalidOperationExceptionを与えると 『AcctUser』テーブルを共有することはできません 『NGUSERS』 ...エンティティタイプはテーブルを共有できません|実際には同じテーブルではありません

を、私は、コードの最初のアプローチを使用して、これらを作成した。

の両方のための私のモデルは何かを見ています彼らはそれぞれが異なるデータベースにそれぞれ独自の接続文字列を持っている

[Table("NGUSERS")] 
public partial class AcctUser 
{ 
    ... 

[Table("NGUSERS")] 
public partial class PmsUser 
{ 
    ... 

のような。私はGEに行うためには何が必要なのか同じテーブル名を使用できるようにする(データベースの変更はオプションではない)

答えて

1

属性の代わりに2つのModelBuilderを使用します。次に、DbModelDbConnectionに渡します。または、DbContextでデータベース名を設定します。 Entity Framework Connections and Modelsを参照してください。

この基底クラスは、DbContextとモデルビルダーを登録することができます:

public abstract class ModelBuilderBase { 

    protected readonly DbModelBuilder ModelBuilder; 

    protected ModelBuilderBase(DbModelBuilder modelBuilder) { 
     ModelBuilder = modelBuilder; 
    } 

    public abstract void BuildModel(); 
} 

ModelBuilderの実装:

public class ModelBuilder1 : ModelBuilderBase { 

    public ModelBuilder1 (DbModelBuilder modelBuilder) : base(modelBuilder) 
    { } 

    public override void BuildModel() { 

     ModelBuilder.Entity<AcctUser>().ToTable("NGUSERS"); 
    } 
} 

DbContext:

public class DbContext1 : DbContext { 
    public DbContext1() : base("Database1") /* set DB name */ { 
    } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) { 
     base.OnModelCreating(modelBuilder); 

     var modelBuilders = new List<ModelBuilderBase> { 
      new ModelBuilder1(modelBuilder) 
     }; 

     modelBuilders.ToList().ForEach(x => x.BuildModel()); 
    } 
} 

秒間ModelBuilder2とDbContext2を作成します。 DB /テーブル。

+0

私はあなたの最初の小さな答えで動作させることができましたが、アップデートは非常に役に立ちます。 – gilliduck

関連する問題