EF ядро: много ко многим в MySQL - PullRequest
1 голос
/ 01 марта 2020

Я пытаюсь создать отношения многие ко многим с ядром EF. Это мои 2 записи:

public class DbCharacter : DbEntity
{
   public string CharName { get; set; }
   public ICollection<DbCharacterSkill> Skills { get; set; }
}
public class DbSkill : DbEntity
{
   public string SkillName { get; set; }
}
public class DbCharacterSkill : DbEntity
{
   public int CharacterId { get; set; }
   public int SkillId { get; set; }

   public DbCharacter Character { get; set; }
   public DbSkill Skill { get; set; }
}
public class DatabaseContext : DbContext
{
   ...

   protected override void OnModelCreating(ModelBuilder modelBuilder)
   {
       // Many to many relations.
       modelBuilder.Entity<DbCharacterSkill>().HasKey(x => new { x.CharacterId, x.SkillId });
       modelBuilder.Entity<DbCharacterSkill>().HasOne(pt => pt.Character).WithMany(p => p.Skills).HasForeignKey(pt => pt.CharacterId);
   }
}

Это должно работать, но я получаю исключение, пока Update-Database: не удалось выполнить команду DbCommand (26ms) [Parameters = [] , CommandType = 'Text', CommandTimeout = '30 '] CREATE TABLE CharacterSkill (CharacterId int NOT NULL, SkillId int NOT NULL, Id int NOT NULL AUTO_INCREMENT, CONSTRAINT PK_CharacterSkill ПЕРВИЧНЫЙ КЛЮЧ (CharacterId, SkillId), ОГРАНИЧЕНИЕ FK_CharacterSkill_Characters_CharacterId ИНОСТРАННЫЙ КЛЮЧ (CharacterId) ССЫЛКИ Characters (Id) НА УДАЛЕННЫЙ КАСКАД, ОГРАНИЧЕНИЕ FK_CharacterSkill_Skills_SkillId ИНОСТРАННЫЙ КЛЮЧ (SkillId) ССЫЛКИ Skills (Id ) НА УДАЛЕННОМ КАСКАДЕ); MySql .Data.MySqlClient.MySqlException (0x80004005): неверное определение таблицы; может быть только один автоматический столбец, и он должен быть определен как ключ

Очевидно, что только Id может быть первичным ключом, поскольку он автоматически увеличивается. Но все учебники, которые я читал, говорили, что я должен написать что-то вроде modelBuilder.Entity<DbCharacterSkill>().HasKey(x => new { x.CharacterId, x.SkillId });.

ВОПРОС: Что произойдет, если я не использую HasKey? Или как правильно подходить ко многим ко многим и MySQL?

...