2017-10-17 2 views
0

A、B、Cの3つのエンティティがあるとします。コードの最初の移行では、別のDbContext内にある1つのエンティティのテーブルを作成する必要があります

public class A // Target entity 
{ 
    public int Foo { get; set; } 
    public int Bar { get; set; } 
} 

public class B 
{ 
    public virtual ICollection<C> C { get; set; } // Navigation to C 
} 

public class C 
{ 
    public virtual A A { get; set; } // Navigation to A 
} 

...、現在シングルコンテキスト:X

public abstract class Context : DbContext 
{ 
    protected const string CONNECTION_NAME = "some_connection_name"; 
    protected const string SCHEMA_NAME = "dbo"; 

    public Context() : base(CONNECTION_NAME) 
    { 
     Database.Log = message => Debug.WriteLine(message); 
    } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.HasDefaultSchema(SCHEMA_NAME); 
     modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 
     modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>(); 
     modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>(); 
    } 
} 

public class X : Context 
{ 
    public DbSet<A> A { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Configurations.Add(new AConfiguration()); 
     base.OnModelCreating(modelBuilder); 
    } 
} 

問題は、私は、ナビゲーションプロパティを介して第2コンテキスト(Y)、したがって、エンティティC点を追加していることですCode First MigrationsはエンティティAのテーブルを作成したいが、既に存在している。

public class Y : Context 
{ 
    public DbSet<B> B { get; set; } 

    public DbSet<C> C { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Configurations.Add(new BConfiguration()); 
     modelBuilder.Configurations.Add(new CConfiguration()); 
     base.OnModelCreating(modelBuilder); 
    } 
} 

どうすればこの問題を解決できますか?

答えて

0

二コンテキストを明示的にAエンティティをIgnore必要があります。より多くのエンティティが依存関係(別のコンテキスト内のエンティティのナビゲーションプロパティ)、大きなとして追加されるため

public class Y : Context 
{ 
    public DbSet<B> B { get; set; } 

    public DbSet<C> C { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Configurations.Add(new BConfiguration()); 
     modelBuilder.Configurations.Add(new CConfiguration()); 

     modelBuilder.Ignore<A>(); 

     base.OnModelCreating(modelBuilder); 
    } 
} 
+0

はそうすることへの簡単な方法は、あります頭痛です。 –

+0

私は気づいていません。私はいつも異なった文脈に属するクラスモデルを互いに隔てるようにしています。私が複数のコンテキストでエンティティを必要とするときは、クラスを再利用するよりも、クラスを再利用するよりも、クラスを再利用するよりも(例えば、コアビジネスコンテキストの 'User'エンティティと、認証コンテキストの' AuthorizationUser'エンティティのように)アプリケーションの特定の集約であるが、同じテーブルにマップされている)。 –

関連する問題