假设我有3个实体:A,B和C;
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),因此实体C通过导航属性指向A,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 :(得分:0)
第二个上下文应明确Ignore 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());
modelBuilder.Ignore<A>();
base.OnModelCreating(modelBuilder);
}
}