无法在 mvc 5 项目中添加新模型和更新数据库

本文关键字:模型 数据库 更新 新模型 添加 mvc 项目 | 更新日期: 2023-09-27 18:36:42

我正在处理的当前项目有问题。它运行良好,并且使用其当前类和功能运行没有错误。我的问题是我似乎无法添加另一个模型,它是相应的控制器和视图并使其实际工作。

通常,我只需将一个新的模型类添加到文件夹中,使用数据库集更新我的数据库上下文类,并将新模型作为数据类型。然后在包管理器控制台中写入"update-database -force",它将应用自动迁移。但是由于某种奇怪的原因,我似乎无法理解,它根本不会再这样做了。

相反,在我创建模型并添加数据库集然后尝试更新数据库后,它会正常运行更新,但它不会添加任何新的迁移。有趣的是,当我运行项目时,我会收到常见的错误,当您忘记更新建议代码优先迁移等的数据库时,您总是会遇到错误。

尝试检查我的配置文件,似乎上下文键设置为applicationuser而不是正确的dbcontext类,我感觉到这就是为什么它没有检测到任何更改的原因(通常它会自己弄清楚这一点?但是当我尝试将其更改为正确的数据库并再次更新数据库时,它给我一个错误,说数据库中已经有关于asproles的内容?

我在这里完全迷失了,并希望有经验的 vs13 用户能给我任何输入。

编辑:我应该提到我最近一直在研究身份框架,这可能就是它自动更改上下文键的原因?但是在此期间,我现有的任何课程都没有遇到任何问题。

最新编辑 (29-01-2015)配置文件的相关部分:

  internal sealed class Configuration : DbMigrationsConfiguration<MEV3.Models.ApplicationDbContext>
    {
        public Configuration()
        {
            AutomaticMigrationsEnabled = true;
            ContextKey = "MEV3.Models.QuestionContext";
        }
        protected override void Seed(MEV3.Models.ApplicationDbContext 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" }
            //    );
            this.AddUserAndRoles();
        }

我的问题上下文文件:

namespace MEV3.Models
{
    public class QuestionContext : DbContext
    {
        public DbSet<ExamSet> ExamSets { get; set; }
        public DbSet<BlanketSet> BlanketSets { get; set; }
        public DbSet<LooseQuestionCase> LooseQuestionCases { get; set; }
        public DbSet<Medcase> Medcases { get; set; }
        public DbSet<Question> Questions { get; set; }
        public DbSet<QuestionChoice> QuestionChoices { get; set; }
        public DbSet<QuestionBeforeAfter> QuestionBeforeAfters { get; set; }
        public DbSet<Answer> Answers { get; set; }
        public DbSet<Tag> Tags { get; set; }
        public DbSet<Category> Categories { get; set; }
        public DbSet<Institution> Institutions { get; set; }
        public DbSet<ExamType> ExamTypes { get; set; }
        public DbSet<NewsArticle> NewsArticles { get; set; }
        //public DbSet<TaskRecord> TaskRecords { get; set; }
        //protected override void OnModelCreating(DbModelBuilder modelBuilder)
        //{  
        //    modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
        //}
    }

My ApplicationDbContext 文件:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
    {
        public ApplicationDbContext()
            : base("DefaultConnection")
        {
        }
        public DbSet<TaskRecord> TaskRecords { get; set; }
    }

当我将上下文键设置为我的 QuestionContext 并尝试对该数据库集中的任何模型进行更改时,它会给我一个关于任务记录的错误(这很奇怪,因为它们在 applicationdbcontext 类中)。

这意味着如果我尝试在 QuestionContext 中更改模型,我将无法对数据库进行任何成功的更新。

如果我将上下文键设置为 ApplicationDbContext,我可以成功地对应用程序数据库上下文中的任何内容进行更改,但它不会记录在 QuestionContext 中的任何模型中所做的任何更改。

我很茫然,它现在的工作方式似乎我只能向应用程序数据库上下文添加新模型或更改其中的模型,无法返回并更改问题上下文中的任何内容。有什么想法吗?

顺便说一句,在两个上下文上都成功启用了自动迁移。在开始摆弄标识框架之前,我已经成功地使用了此设置。

无法在 mvc 5 项目中添加新模型和更新数据库

您的应用程序具有多个上下文,因此您应该告诉Update-Migration要从中选择哪种配置。如果两个上下文位于不同的项目中,则可以使用 -ProjectName <string> 命令。否则,请使用 -ConfigurationTypeName <string> 命令,确保您的配置类具有不同的名称。此外,请确保您QuestionContext的配置是公共的。更多信息在这里。

此外,请确保在运行项目时连接字符串指向正确的数据库(在当前生成配置下)。

最后,我建议您Enable-Migrations因为像您一样强制使用它可能会导致数据丢失。