具有代码优先迁移的一个DB上的多个DbContexts

我偶然发现了这个问题所描述的问题 。 另外,我不想从数据库中删除__migrationHistory表。

我尝试使用建议的解决方案使用一个“超级”上下文,其中包含所有DbSet s并使用正常的上下文,但我收到了一个错误。 (“模型支持DbContext已更改”)如果您只是从SQL服务器中删除__migrationHistory表,这很容易避免,但正如我所说,我想保留历史记录。

我找到了一个简单易用的解决方案,请参阅下面的答案。

首先,您必须为迁移配置创建“超级”上下文。

MySuperContext : DbContext { // All DbSet<> s from your different contexts have to be referenced here once, you will only use this class for the migrations. public MySuperContext() : base("YourConnectionString") { System.Data.Entity.Database.SetInitializer(new MigrateDatabaseToLatestVersion()); } } 

然后只需创建以下类:

 public class NoDatabaseInitializer : IDatabaseInitializer where T: DbContext { public void InitializeDatabase(T context) { // Do nothing, thats the sense of it! } } 

现在,在您拥有的每个小上下文中,将其添加到构造函数中:

 class MyUserContext : DbContext { public MyUserContext : base("MyConnectionString") // Can be a user context, etc { System.Data.Entity.Database.SetInitializer(new NoDatabaseInitializer()); } } 

现在你不会再出现这个错误,
另外,你将拥有你的移民历史,
并且您将在一个数据库上使用多个上下文。

DbContext支持每个数据库多个DbContext : http : DbContextDbContext