【问题标题】:How do I get Entity Framework Code First Migrations to see my models?如何获得 Entity Framework Code First Migrations 以查看我的模型?
【发布时间】:2016-07-24 03:17:25
【问题描述】:

我创建了一个新的 ASP.Net Web 应用程序并在其上启用了迁移。我运行了add-migration initial,而initial 迁移实际上具有所有用于身份验证的默认表(dbo.AspNetRoles、dbo.AspNetUserRoles 等)。但是,当我创建自己的上下文并向其中添加实体模型时,我无法通过迁移来确认该模型。也就是说,当我运行add-migration added-watchedgame-model 时,我只会得到一个“空”迁移文件。那么我做错了什么?我的 DbContext 是否必须以某种方式引用? Entity Framework 只能处理 1 个 dbcontext 的迁移吗?

ReleaseDateMailerDBContext.cs:

using System.Data.Entity;
using WebApplication4.Models;

namespace WebApplication4.DataAccess
{
    public class ReleaseDateMailerDBContext : DbContext
    {
        public ReleaseDateMailerDBContext() : base("DefaultConnection") { }

        public DbSet<WatchedGameModel> WatchedGameModelSet { get; set; }
    }
}

WatchedGameModel.cs:

using System.ComponentModel.DataAnnotations;

namespace WebApplication4.Models
{
    public class WatchedGameModel
    {
        public int ID { get; set; }
        [MaxLength(1024)]
        public string URL { get; set; }
        public string Email { get; set; }
        public bool EmailSent { get; set; }
    }
}

“空”迁移文件:

namespace ReleaseDateMailer.Migrations
{
    using System;
    using System.Data.Entity.Migrations;

    public partial class addedwatchedgamemodel : DbMigration
    {
        public override void Up()
        {
        }

        public override void Down()
        {
        }
    }
}

【问题讨论】:

  • 我认为您需要运行 update-database 以便框架将表添加到数据库中。
  • @Ingenioushax 试了一下,没有运气。
  • 您需要运行 enable-migrations 命令来初始化数据库上的代码优先迁移
  • @pquest 已经做到了,这就是我已经获得 dbo.AspNetRoles 表的方式
  • @AdamR.Grey :您的意思是创建了 AspNetRoles 表吗?在那种情况下,您是否创建了这个新文件ReleaseDateMailerDBContext 并在那里添加了 DBSet。您必须查找文件ApplicationDbContext,在那里您必须更新新的 DBSet。

标签: c# asp.net-mvc entity-framework entity-framework-migrations


【解决方案1】:

“批量清理”可以解决您的问题。

这表明 EF 工具/程序集正在查找默认构建输出位置以外的位置(通常是 /bin/Debug)。顺便说一句,clean 命令还清除中间输出。

要进行批量清理:

  1. 选择Build -> Batch Build
  2. 点击Select All
  3. 点击Clean

关闭对话框,重新构建并重新尝试迁移。

【讨论】:

    【解决方案2】:

    在运行 add-migration 命令时,您的包管理器控制台应该指向具有您的 DBContext 类 (WebApplication4.DataAccess) 的项目。 如果您在与您的 Web 应用程序项目不同的项目中进行迁移(假设 WebApplication4.Web),那么您应该运行以下命令:

    add-migration "MigrationName" -projectName:WebApplication.DataAccess -startupProjectName:WebApplication4.Web
    

    希望对你有帮助!!

    【讨论】:

    • 这对我来说都是一个项目。 (无论如何试一试,没有运气)这是问题所在,我必须使用多个项目吗?
    • @AdamR.Grey 不。他们不是必须在不同的项目中。它们可以在一个项目中。
    • @AdamR.Grey 我的意思是上下文在 WebApplication4.DataAccess 中,但迁移在 ReleaseDateMailer.Migrations 中。您可以发布您的文件夹结构吗?您是否还通过在包管理器控制台中输入“enable-migrations”来启用迁移。
    • 是的,这是一个错误,我在某个时候更改了项目的名称。我的文件夹结构是默认的 Web 项目结构...我会发布它,但我发现我做错了什么,请查看我的答案。
    【解决方案3】:
    • 使用内置的 asp.net mvc 项目,已经有一个 DbContext 类(ApplicationDbContext) 已创建!
    • 输入enable-migrations时,会根据找到的dbcontext类创建迁移配置类。
    • 当您输入 add-migration "migrationname" 时,将检查该 dbcontext 类是否存在差异。

    因此,大家所要做的就是使用该类,而不是创建自己的派生自 DbContext 的类。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-10
      • 1970-01-01
      • 2013-03-11
      相关资源
      最近更新 更多