gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 13:12:40 25 4
gpt4 key购买 nike

我对当前正在进行的项目有疑问。它工作正常并且运行时没有错误,并且具有当前的类和功能。我的问题是我似乎无法添加另一个模型,它是相应的 Controller 和 View 并使其实际工作。

通常我会简单地向文件夹中添加一个新的模型类,用新模型作为数据类型的 dbset 更新我的 dbcontext 类。然后在包管理器控制台中写入“update-database -force”,它会应用自动迁移。但出于某种我似乎无法理解的奇怪原因,它不再这样做了。

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

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

我完全迷失在这里,非常感谢有经验的 vs13 用户可以给我的任何输入。

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

新编辑 (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>();
//}

}

我的 ApplicationDbContext 文件:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{

public ApplicationDbContext()
: base("DefaultConnection")
{

}

public DbSet<TaskRecord> TaskRecords { get; set; }

}

当我将 contextkey 设置为我的 QuestionContext 并尝试更改该 dbset 中的任何模型时,它会给我一个关于任务记录的错误(这很奇怪,因为它们在 applicationdbcontext 类中)。

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

如果我将上下文键设置为 ApplicationDbContext,我可以成功地对 applicationdbcontext 中的任何内容进行更改,但它不会注册在 QuestionContext 中的任何模型中所做的任何更改。

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

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

最佳答案

您的应用程序有多个上下文,因此您应该告诉 Update-Migration选择哪种配置。如果两个上下文在不同的项目中,您可以使用 -ProjectName <string>命令。否则,使用 -ConfigurationTypeName <string>命令,确保您的配置类具有不同的名称。另外,请确保您的 QuestionContext的配置是公开的。 More information here .

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

最后给大家推荐一下Enable-Migrations像你那样强制执行它会导致数据丢失。

关于c# - 无法在 mvc 5 项目中添加新模型和更新数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27826277/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com