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);
}
}
我該如何克服這個問題?
是否有這樣一個簡單的方法,因爲更多的實體(不同的上下文中的導航屬性的實體)的依賴性增加,更大是頭痛。 –
不是我所知道的。我總是儘量讓屬於不同情境的班級模特彼此分開。當我需要多個上下文中的實體時,我寧願複製類,而不是重用類(例如:核心業務上下文中的'User'實體和授權上下文中的'AuthorizationUser'實體,它們都只具有它們需要的關聯應用程序的特定聚合,但映射到同一個表)。 –