Visual Studio 实体框架六:多对多关系问题

pod7payv  于 2023-03-03  发布在  其他
关注(0)|答案(2)|浏览(132)

我从一个教程开始,在那里我创建了类:

namespace SamuraiApp.Domain
{
    public class Battle
    {
        public int BattleId { get; set; }
        public string Name { get; set; }
        public List<Samurai> Samurais = new List<Samurai>();
    }
}

以及

namespace SamuraiApp.Domain
{
    public class Samurai
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public List<Quote> Quotes { get; set; } = new List<Quote>();
        public List<Battle> Battles { get; set; } = new List<Battle>();
    }
}

和数据库上下文

public class SamuraiContext:DbContext
    {
        public DbSet<Samurai> Samurais { get; set; }
        public DbSet<Quote> Quotes { get; set; }
        public DbSet<Battle> Battles { get; set; }
          protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlServer("Data Source= (localdb)\\MSSQLLocalDB; Initial Catalog=SamuraiAppData");
            // si on a sqlLite on va écrire  optionsBuilder.UseSqlLite("<chaine de connexion sqlite>")

        }

    }

我以为entityFramework6单独解释多对多关系并生成中间表BattleSamurai,但生成基础时没有考虑这种关系(请参见screenshot)。
请问你有何评论?

vatpfxk5

vatpfxk51#

public int BattleId { get; set; }Samurai相加,将public int SamuraiId { get; set; }Battle相加。
确保您可以在迁移中查看Samurai是否具有指向Battle的外键,反之亦然。

9jyewag0

9jyewag02#

我正在关注这篇关于EF中多对多关系的文章。
根据它,代码应该如下所示(请注意,我看不到Quote类,可能您也必须在Samurai类中重构该类以匹配ICollection):

namespace SamuraiApp.Domain
{
    public class Battle
    {
        public Battle() 
        {
             this.Samurais = new HashSet<Samurai>();
        }
        public int BattleId { get; set; }
        public string Name { get; set; }
        public ICollection<Samurai> Samurais {get; set;}
    }
}

namespace SamuraiApp.Domain
{
    public class Samurai
    {
        public Samurai()
        {
           this.Battles = new HashSet<Battle>();
        }
        public int Id { get; set; }
        public string Name { get; set; }
        public List<Quote> Quotes { get; set; } = new List<Quote>();
        public ICollection<Battle> Battles { get; set; };
    }
}

相关问题