Как добавить IsRequired с помощью FluentAPI в EF для .NET Core, когда в уже существующем классе отсутствуют навигационные поля? - PullRequest
1 голос
/ 04 июня 2019

Фон в том, что текущая БД настроена из-за тысячи сценариев и должна рассматриваться как неприкасаемая.Я бы хотел снимать на новом столе (который работал довольно хорошо , следуя этому руководству ).Тем не менее, я застрял при создании отношений с существующим мусором.

У меня новый класс, объявленный следующим образом.

public class Stuff
{
  public int Id { get; set; }
  public int OldThingId { get; set; }
  public virtual OldThing OldThing { get; set; }
}

Я хочу, чтобы у него был родитель типа OldThing , поэтому я добавил следующее.

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
  ...
  OnModelCreating(modelBuilder.Entity<Stuff>());
}
private void OnModelCreating(EntityTypeBuilder<Stuff> entity)
{
  entity.HasKey(a => a.Id);
  entity.HasOne(a => a.OldThing);
  //entity.HasOne(a => a.OldThing).IsRequired();
}

Здесь я хотел бы использовать WithMany и IsRequired , но поскольку старая вещь не имеетОтносительно нового материала (и я предпочитаю не вмешиваться в него), я не уверен, как сказать FluentApi, что поле является обязательным.К сожалению, этот метод не существует в HasOne .

Как мне подойти к нему?

1 Ответ

1 голос
/ 04 июня 2019

Вы должны быть в состоянии звонить IsRequired() на PropertyBuilder на EntityTypeBuilder:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{        
    modelBuilder.Entity<Stuff>().HasKey(a => a.Id);
    modelBuilder.Entity<Stuff>().HasOne(a => a.OldThing);
    modelBuilder.Entity<Stuff>()
        .Property(s => s.OldThingId)
        .IsRequired();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...