获取多个DbContexts以使用相同数据库的迁移

时间:2014-01-10 20:26:57

标签: c# entity-framework ef-code-first asp.net-mvc-5 ef-migrations

基于MVC5示例项目,我正在尝试学习处理迁移的正确方法。

在根目录中,我有一个名为“DbContexts”的文件夹,其中包含两个上下文。

第一个:IdentityContext.cs

    public class IdentityContext : IdentityDbContext<ApplicationUser>
{
    public IdentityContext()
        : base("DefaultConnection")
    { }
}

然后我有一个名为IdentityMigrations的文件夹,其中包含Configuration.cs

    internal sealed class Configuration : DbMigrationsConfiguration<TryFive.Web.DbContexts.IdentityContext>
{
    public Configuration()
    {
        AutomaticMigrationsEnabled = true;
        MigrationsDirectory = @"DbContexts\IdentityMigrations";
    }

    protected override void Seed(TryFive.Web.DbContexts.IdentityContext context)
    {
        //  This method will be called after migrating to the latest version.

        //  You can use the DbSet<T>.AddOrUpdate() helper extension method 
        //  to avoid creating duplicate seed data. E.g.
        //
        //    context.People.AddOrUpdate(
        //      p => p.FullName,
        //      new Person { FullName = "Andrew Peters" },
        //      new Person { FullName = "Brice Lambson" },
        //      new Person { FullName = "Rowan Miller" }
        //    );
        //
    }
}

然后我有类似属性的MyContexts。

当我尝试运行“Update-Database”命令时,收到以下错误消息:The type 'TryFive.Web.DbContexts.IdentityContext' does not inherit from 'System.Data.Entity.Migrations.DbMigrationsConfiguration'. Migrations configuration types must extend from 'System.Data.Entity.Migrations.DbMigrationsConfiguration'.

有关如何解决这个或更好的方法来做这个DbContext的想法?

1 个答案:

答案 0 :(得分:2)

建议:如果你正在做一个示例项目来学习如你所说的迁移,请坚持使用一个DbContext。保持简单 - 将您的实体合并为一个继承自IdentityDbContext<ApplicationUser>

的DbContext

删除您创建的现有迁移文件夹 - 并在删除第二个DbContext后重新启用“enable-migrations”。这将帮助您继续学习迁移,而不是学习如何在一个项目中使用两个DbContext。

另外,@ Lajos,我不确定你在谈论哪个MVC,但我的DbContext从未从DbMigrationsConfiguration继承 - 它们继承自DbContext或IdentityDbContext。您所指的是在项目上发出“enable-migrations”时生成的MigrationsConfiguration类。它用于生成迁移和播种数据。