簡體   English   中英

插入數據庫多對多關系.net core 3.1

[英]insert into database many to many relationship .net core 3.1

我正在嘗試建立多對多的關系。 我為表格制作了以下課程。

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 ,我有這行代碼,我相信它會自動在表中填寫我的ClassIDRaceId但是當我運行程序時,這個表將是空的,並且兩行都是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 我該如何解決?

我建議您在操作插入時設置 Id 值(特別關注您在 RaceClass 模型中所做的事情):

將為您提供 OnModelCreating 方法中的數據播種示例(您也可以執行循環,因為我看到了您的評論之一):

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

在方法底部調用 _context.SaveChanges()。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM