为新表生成迁移

本文关键字:迁移 新表生 | 更新日期: 2023-09-27 18:28:43

我刚刚创建了一个带有一些数据库结构的模型,我想创建

namespace Ability.Models
{
    public class Skill
    {
        [key]
        public int ID { get; set; }
        public string SkillName { get; set; }
        public virtual List<Teacher> Teachers { get; set; }
    }
    public class Teacher
    {
        [key]
        public int ID { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Email { get; set; }
        public string Campus { get; set; }
        public virtual List<Skill> Skills { get; set; }
    }
    public partial class AbilityDbContext : DbContext
    {
        public AbilityDbContext()
               : base("name= DefaultConnection")
        {
        }
        public virtual DbSet<Teacher> Teachers { get; set; }
        public virtual DbSet<Skill> Skills { get; set; }
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Teacher>()
            .HasMany(s => s.Skills)
            .WithMany(c => c.Teachers);
            base.OnModelCreating(modelBuilder);
        }
    }
}

但是,我不知道如何为这些新表生成迁移。我以为当我尝试更新数据库时,它会给我一条消息,这样我就可以使用添加迁移,但它只是说

没有挂起的显式迁移。

因此,我的问题是,我如何让Entity框架为我完成工作并创建正确的迁移?

为新表生成迁移

从visual studio的Tools菜单项下在包管理器控制台中运行以下命令,以便进行迁移

enable-migrations
add-migration AddTeacher
add-migration AddSkill
update-database

此外,如果这些实体是新添加的,那么您需要使用Table属性(如)来装饰它们

    [System.ComponentModel.DataAnnotations.Schema.Table("Skills")]
    public class Skill
    {
        [key]
        public int ID { get; set; }
        public string SkillName { get; set; }
        public virtual List<Teacher> Teachers { get; set; }
    }
   [System.ComponentModel.DataAnnotations.Schema.Table("Teachers")]
    public class Teacher
    {
        [key]
        public int ID { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Email { get; set; }
        public string Campus { get; set; }
        public virtual List<Skill> Skills { get; set; }
    }