вставить в базу данных отношения "многие ко многим". net core 3.1 - PullRequest
0 голосов
/ 25 мая 2020

Я пытаюсь установить отношения «многие ко многим». Я создал следующие классы для таблиц.

public class Class {
  public int Id { get; set; }
  public string ClassName { get; set; }
  public string ClassRequirements { get; set; }
  public int HitDie { get; set; }
  public IList<ClassRace> ClassRaces { get; set; } 
}
public class Race {
  public int RaceID { get; set; }
  public string RaceName { get; set; }
  public string RaceFeatures { get; set; }
  public List<ClassRace> ClassRaces { get; set; }
}
public class ClassRace {
  public int ClassID { get; set; }
  public Class Class { get; set; }
  public int RaceID { get; set; }
  public Race Race { get; set; }
}

Я инициализирую значения в таблицах при первом запуске программы.

var cl1 = new Class() {
  ClassName = "Barbarian",
  ClassRequirements = "13 Strength",
  HitDie = 12,
  ClassRaces = new List<ClassRace>() 
};
Race rc1 = new Race() {
  RaceName = "Elf",
  RaceFeatures = "DarkVision. +2 Wisdom",
  ClassRaces = new List<ClassRace>()
};
var cr = new ClassRace {
  Class = cl1,
  Race = rc1
};
rc0.ClassRaces.Add(cr);
cl1.ClassRaces.Add(cr);

На моем DbContext I есть эта строка кода, которая, как я полагал, автоматически заполнит мои ClassID и RaceId в таблице, однако, когда я запускаю программу, эта таблица будет пустой, и обе строки будут NULL.

public DbSet<Race> Races { get; set; }
public DbSet<Class> Classes { get; set; }
public DbSet<ClassRace> ClassRaces { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder) {
  modelBuilder.Entity<ClassRace>().
    HasKey(cr => new { cr.ClassID, cr.RaceID });
  modelBuilder.Entity<ClassRace>().
    HasOne(x => x.Race).
    WithMany(x => x.ClassRaces).
    HasForeignKey(x => x.RaceID).
    OnDelete(DeleteBehavior.Restrict).
    IsRequired();
  modelBuilder.Entity<ClassRace>().
    HasOne(x => x.Class).
    WithMany(x => x.ClassRaces).
    HasForeignKey(x => x.ClassID).
    OnDelete(DeleteBehavior.Restrict).
    IsRequired();
}

Почему у меня ClassRaces таблица NULL. Как это исправить?

1 Ответ

0 голосов
/ 25 мая 2020
• 1000 выполните циклы, как я видел один из ваших комментариев):
 modelBuilder.Entity<Class>().HasData(new Class
                {
                    Id = 1,
                    ClassName = "Barbarian",
                    ClassRequirements = "13 Strength",
                    HitDie = 12
                });



modelBuilder.Entity<Race>().HasData(new Race
                {
                     Id = 1,
                     RaceName = "Elf",
                     RaceFeatures = "DarkVision. +2 Wisdom"
                });

modelBuilder.Entity<ClassRace >().HasData(new ClassRace 
                {
                     Id = 1,
                     RaceId = 1,
                     ClassId= 1
                });

Call _context.SaveChanges () внизу вашего метода.

...