迁移我的数据库并添加新的 table 时,我是否需要来自 EntityFramework Code First 的模型构建器?

Do I need Modelbuilder from EntityFramework Code First when migrating my database and adding a new table?

当我向我的域添加一个新的 class 并将其添加到我的 DBContext 时,例如:

我加这个class

namespace Zoo.Domain
{
    [Table("Owner")]
    public partial class Owner
    {

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

        [Required]
        public string Name { get; set; }
        public string Email { get; set; }

        public virtual ICollection<Animal> Animals { get; set; }
    }
}

并将其添加到我的 Animal class:

public virtual ICollection<Owner> Owners { get; set; }

并将其添加到我的 DBContext 中:

public virtual DbSet<Owner> Owners { get; set; }

接下来,我通过在程序包管理器控制台中执行 'add-migration AddAnimalOwners' 命令和 'update-database' 命令来添加新的迁移。

EntityFrameWork 似乎为我创建了 Animal 和 Owner 之间的关系,但如果是这样的话,为什么 ModelBuilder 存在,我在更新数据库时什么时候需要它?例如,当我第一次创建我的数据库时,以下代码出现在我的 DBContext class:

 modelBuilder.Entity<Animal>()
                .Property(e => e.Name)
                .IsUnicode(false);

            modelBuilder.Entity<Animal>()
                .Property(e => e.Type)
                .IsUnicode(false);

            modelBuilder.Entity<Animal>()
                .Property(e => e.ImgUrl)
                .IsUnicode(false);

            modelBuilder.Entity<Animal>()
                .HasMany(e => e.Bookings)
                .WithMany(e => e.Animals)
                .Map(m => m.ToTable("Animal_has_booking").MapLeftKey("AnimalID").MapRightKey("BookingID"));

当我第一次创建我的数据库时,它似乎也没有为我域中的每个模型生成模型构建器

modelBuilder 用于允许您配置特定于给定数据库的模型的各个方面。当首次创建上下文以构建模型及其在内存中的映射时,框架会调用它。 例如这里:

modelBuilder.Entity<Animal>() .HasMany(e => e.Bookings) .WithMany(e => e.Animals)

指定 Bookings 和 Animals 之间存在 Many-to_many 关系。 如果您没有任何要指定的内容,则不需要使用 modelBuilder,这就是为什么您看不到每个模型的原因。