c# - 一个数据库上的多个 DbContext 代码优先迁移

标签 c# entity-framework ef-code-first entity-framework-migrations

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

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

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

最佳答案

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

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

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

关于c# - 一个数据库上的多个 DbContext 代码优先迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17246069/

相关文章:

entity-framework - Entity Framework 匹配 int 的子集

entity-framework-4 - Entity Framework 4.1 代码优先 : Single column foreign-key to multiple entities

c# - 限制用户访问其他选项卡中的应用程序

c# - 从 session 到成员文件夹的身份验证

c# - Linq "Where"比 Linq "Select"贵吗?

c# - C# 和 VB 中的锯齿状数组 CLS 合规性不同?

java - 如何将一对一 hibernate 实体映射到一对多数据库结构?

c# - SP 在 EF 5 CF 中有多个结果

c# - 无法看到 Entity Framework 中创建的数据库

asp.net-mvc-3 - 使用接口(interface)和 EF Fluent API