3

我偶然发现了与此问题中描述的相同的问题。此外,我不想从数据库中丢失 __migrationHistory 表。

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

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

4

2 回答 2

5

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

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<MySuperContext, MyMigrationsConfiguration>());
    }
}

然后只需创建以下类:

public class NoDatabaseInitializer<T> : IDatabaseInitializer<T> 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<MyContext>());
    }
}

现在您将不再收到此错误,
此外,您将拥有迁移历史记录,
并且您将在一个数据库上使用多个上下文。

于 2013-06-22T00:17:57.947 回答
2

EF6 支持DbContext每个数据库多个 s:http ://entityframework.codeplex.com/wikipage?title=Multi-tenant%20Migrations

于 2014-01-02T15:24:35.723 回答