Внешний ключ - неизвестный столбец MySqlException в списке полей - PullRequest
0 голосов
/ 01 апреля 2020

Я создаю веб-приложение - ASP. NET Ядро с Entity Framework- и имею около 10 таблиц в базе данных MYSQL. Я начал с создания базы данных и оттуда создал модели, а затем создал контроллеры для каждой таблицы, чтобы пользователь мог выполнять операции CRUD из приложения.

Все отлично работает для 9 из 10 таблиц, но при попытке доступа к индексу (или любой другой странице в этом отношении) одна из них выдает ошибку:

MySqlException: Unknown column ' x.DeviceId 'in' field list '

Этот столбец не существует, но, поскольку таблица имеет внешний ключ DeviceTypeId, и, посмотрев немного на людей, имеющих подобные проблемы, кажется, что проблема может заключаться в том, что FK не определен должным образом, и ему было присвоено имя автоматически. По этой причине я добавил тег FK в файл модели и проверил, что я включил .HasForeignKey (d => d.DeviceTypeId) в файл контекста.

Похоже, что это не решает проблему, и я не вижу, где я иду не так, поэтому, если у кого-то есть какие-либо идеи, я был бы очень признателен за помощь, поскольку я застрял на этом некоторое время .

Вот модель, которая у меня есть

public partial class Mag
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Abbreviation { get; set; }
        public string Unit { get; set; }
        public string Description { get; set; }
        public int DeviceTypeId { get; set; }

        [ForeignKey("DeviceTypeId")]
        public DeviceType DeviceType { get; set; }
    }

, и вот соответствующая часть файла контекста

modelBuilder.Entity<Mag>(entity =>
            {
                entity.ToTable("magnitude", "database");

                entity.HasIndex(e => e.DeviceTypeId)
                    .HasName("device_type_id");

                entity.Property(e => e.Id)
                    .HasColumnName("id")
                    .HasColumnType("int(11)");

                entity.Property(e => e.Name)
                    .IsRequired()
                    .HasColumnName("name")
                    .HasMaxLength(100)
                    .IsUnicode(false);

                entity.Property(e => e.Abbreviation)
                    .IsRequired()
                    .HasColumnName("abbreviation")
                    .HasMaxLength(20)
                    .IsUnicode(false);

                entity.Property(e => e.Unit)
                   .IsRequired()
                   .HasColumnName("unit")
                   .HasMaxLength(20)
                   .IsUnicode(false);

                entity.Property(e => e.Description)
                   .IsRequired()
                   .HasColumnName("description")
                   .IsUnicode(false);

                entity.Property(e => e.DeviceTypeId)
                    .HasColumnName("device_type_id")
                    .HasColumnType("int(11)");

                entity.HasOne(d => d.DeviceType)
                    .WithMany(p => p.Mag)
                    .HasForeignKey(d => d.DeviceTypeId)
                    .OnDelete(DeleteBehavior.ClientSetNull)
                    .HasConstraintName("magnitude_ibfk_1");
            });

Вот код индекса с контроллера

public async Task<IActionResult> Index()
        {
            var adminReturn = _context.Mag.Include(m => m.DeviceType);
            return View(await adminReturn.ToListAsync());
        }

Спасибо!

...