Нужен ли Modelbuilder из кода EntityFramework First при переносе базы данных и добавлении новой таблицы? - PullRequest
0 голосов
/ 16 января 2020

Когда я добавляю новый класс в свой домен и добавляю его в мой DBContext, например:

Я добавляю этот класс

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:

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

И добавьте это в мой DBContext:

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

И затем я добавлю новую миграцию, выполнив команду add -igration AddAnimalOwners и команду update-database в Консоль диспетчера пакетов.

EntityFrameWork, похоже, создает для меня отношения между Animal и Owner, но если это так, почему существует ModelBuilder и когда он мне понадобится при обновлении базы данных? Например, когда я впервые создал свою базу данных, в моем классе DBContext появился следующий код:

 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"));

Похоже, что он также не генерирует построитель моделей для каждой модели в моем домене, когда я впервые создал свою базу данных

1 Ответ

1 голос
/ 16 января 2020

modelBuilder используется, чтобы позволить вам сконфигурировать аспекты модели, которые определены c для данной базы данных. Он вызывается платформой, когда ваш контекст впервые создается для построения модели и ее отображений в памяти. Например, здесь:

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

Указывает, что существует отношение «многие к многим» между бронированием и животными. Если вам нечего указать, вам не нужно использовать modelBuilder, поэтому вы не видите его для каждой модели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...