HasOne с сопоставлением OneToMany - PullRequest
0 голосов
/ 10 октября 2019
public class Car
{
    public int Id { get; set; }
    public string Name { get; set; }
    public Owner Owner { get; set; }
}

public class Owner
{
   public int Id { get; set; }
   public string Name { get; set; }
   public IEnumerable<Country> VisitedCountries { get; set; }
}

public class Country
{
   public int Id { get; set; }
   public string Name { get; set; 
   public Owner Owner { get; set; }       
}

Я сопоставляю это отношение как

public class CarConfiguration : IEntityTypeConfiguration<Car>
{
   public void Configure(EntityTypeBuilder<Car> builder)
   {
       builder.ToTable("Car");
       builder.HasKey(x => x.Id);
       builder.Property(x => x.Id).HasColumnName("Id").ValueGeneratedOnAdd();
       builder.HasOne(x => x.Owner);
   }
}

На данный момент я добавил файл OwnerConfiguration в качестве отдельного файла конфигурации

public void Configure(EntityTypeBuilder<Owner> builder)
{
     builder.ToTable("Owner");
     builder.HasMany(x => x.VisitedCountries);
     ...
}

Мой вопрос: какмогу ли я выполнить рефакторинг и использовать его только в файле конфигурации карты (например, CarConfiguration) и удалить файл OwnerConfiguration?

1 Ответ

0 голосов
/ 10 октября 2019

Для IEntityTypeConfiguration это позволяет сконфигурировать тип сущности в отдельный класс, и вы не сможете использовать его для другой модели.

Как правило, существует два способа настройки модели: IEntityTypeConfiguration в отдельном файле и прямая настройка в OnModelCreating.

При наличии множества моделей рекомендуется использовать IEntityTypeConfiguration для отдельных конфигураций, которые легко настраиваются. Если вы просто хотите избежать настройки modelBuilder.ApplyConfiguration(new CarConfiguration());, вы можете попробовать как modelBuilder.ApplyEntityTypeConfigurations(Assembly.GetExecutingAssembly());.

Если вы хотите настроить одно место, вы можете следовать OnModelCreating как

    protected override void OnModelCreating(ModelBuilder builder)
    {
            base.OnModelCreating(builder);
            builder.Entity<Car>(c =>
            {
            c.ToTable("Car");
            c.HasKey(x => x.Id);
            c.Property(x => x.Id).HasColumnName("Id").ValueGeneratedOnAdd();
            c.HasOne(x => x.Owner);
            });
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...