表格未使用EF代码首先映射

时间:2016-04-28 13:27:14

标签: c# .net entity-framework asp.net-identity code-first

我想使用EF code first approach。我添加了数据库,然后生成表格。然后我添加了这个类

  public class Invitation
    {


        [Key]
        public int Id { get; set; }

        [DefaultValue(false)]
        public bool State { get; set; }

        public string Mail { get; set; }

        public string Tel { get; set; }

        public string Name { get; set; }

        public string Qr_code { get; set; }

    }

然后我运行这些命令:

  

add-migrations second

     

更新的数据库

第二类迁移的UpDown方法都是空的!!并且没有表添加到数据库中。

上下文

 public class ApplicationContext: IdentityDbContext<ApplicationUser>
    {
         public ApplicationContext()
            :base("DefaultConnection")
        {
            Database.SetInitializer<ApplicationContext>(new CreateDatabaseIfNotExists<ApplicationContext>());
        }

        public static ApplicationContext Create()
        {
            return new ApplicationContext();
        }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
        }
    }

所以我需要知道

  1. 这个问题的原因是什么?
  2. 我该如何解决?

3 个答案:

答案 0 :(得分:2)

您似乎忘了告诉Entity Framework您要添加的新表(DbSet<Invitation>

添加完成后,Entity Framework应分别在Migration脚本中添加要添加的表。

总之,您需要添加以下行:

public DbSet<Invitation> Invitations { get; set; }

和/或

public IDbSet<Invitation> Invitations { get; set; }

并运行另一个迁移脚本。

答案 1 :(得分:2)

尝试将以下内容添加到ApplicationContext类

public DbSet<Invitation> Invitations { get; set; }

然后跑步;

Enable-Migration
Add-Migration note_of_changes
Update-Database

答案 2 :(得分:1)

我认为您需要创建初始迁移。如果这是您的第一次迁移(请注意,这将清除您现有的迁移历史记录,因此只有在您愿意放弃现有的迁移历史记录时才会使用)

  1. 删除解决方案中的“迁移”文件夹
  2. 删除您的更改(从DbContext中删除对新表的引用)。请注意,-IgnoreChanges可能会使此步骤变得多余,但我无法肯定地说。
  3. 从数据库中删除MigrationHistory表(很可能不存在,但如果是,则可以继续删除)
  4. 现在启用迁移(在包管理器控制台中)

    Enable-Migrations
    

    然后创建初始迁移。这将创建一个与现有模式匹配的迁移与空方法

    Add-Migration Initial –IgnoreChanges
    Update-Database
    

    然后使用新的表格参考更新DbContext并进行所需的任何其他更改

    Add-Migration MyChanges
    Update-Database
    

    这应该将更改应用于数据库。如果您需要,可以使用一些more info over at MSDN