2017-10-17 159 views
0

假設我有3個實體:A,B和C;Code First Migration想要爲不同的DbContext中的一個實體創建表格

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); 
    } 
} 

的問題是,我通過導航屬性添加第二上下文(Y),因此該實體Ç指向一個,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

第二方面應該明確IgnoreA實體:

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'實體,它們都只具有它們需要的關聯應用程序的特定聚合,但映射到同一個表)。 –

相關問題