В чем причина возникновения "System.InvalidOperationException" при инициализации моего класса для передачи в БД средствами EF?

Я впервые работаю с БД MS SQL + EF. Использую: Microsoft.EntityFrameworkCore.SqlServer 6.0.6

У меня есть 2 похожих класса, Сущности которых нужно отправить в БД, в 2 разные таблицы.

  • Я написал код для добавления первой сущности, выполнил его - в БД все улетело и отобразилось корректно.
  • После чего дополнил код алгоритмом добавления в БД, в ещё одну таблицу, второй сущности, словив на данном этапе Exeption.

Код Класса, который не могу добавить:

    public class MapperSattelite
    {
        [Key]
        public int Id { get; set; }

        public string Country { get; set; } 
        public string Name { get; set; } 
        public string TargetPlatform { get; set; } 
        public string? CosparNumber { get; set; } 

        [DataType(DataType.Date)]
        public DateOnly? LaunchDate { get; set; } = null!;

        public MapperSattelite(int id, string country, string name, string targetplatform, string cosparnumber, DateOnly launchdate)
        {
            Id = id;
            Country = country;
            Name = name;
            TargetPlatform = targetplatform;
            CosparNumber = cosparnumber;
            LaunchDate = launchdate;

        }

Код добавления:

            using (ApplicationContext db = new())
            {

                foreach (Platform platform in Platforms) // Добавляю 1й класс - всё ок.
                {
                    int ind = 0;
                    string n = string.Empty;
                    string m = string.Empty;

                    for (int i = 0; i < platform.Names.Count; i++)
                    {
                        n += platform.Names[i].ToString();
                        m += platform.Manufacturers[i].ToString();
                    }

                    MapperPlatform mp = new(ind, platform.Country, n, m, platform.Info);
                    db.Platforms.Add(mp);
                    ind++;
                }

                foreach (Generation gen in Sattelites) // Всё не ок
                {
                    int id = 0;
                    for (int i = 0; i < gen.StVersions.Count; i++)
                    {
                        string country = gen.Country;
                        string platform = gen.PlatformName;
                        string sattelitename = gen.StVersions[i].Name;
                        string cospar = gen.StVersions[i].COSPARnumber;
                        DateOnly launch = gen.StVersions[i].StartDate;
                        MapperSattelite ms = new(id, country, sattelitename, platform, cospar, launch);
                        db.Sattelites.Add(ms);
                        id++;
                    }
                }

                db.SaveChanges();

            }

Класс ApplicationContext для взаимодействия с БД

    public class ApplicationContext : DbContext
    {
        public DbSet<MapperPlatform> Platforms { get; set; } = null!;
        public DbSet<MapperSattelite> Sattelites { get; set; } = null!;


        public ApplicationContext()
        {
            Database.EnsureDeleted();
            Database.EnsureCreated();
        }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=SkyrocketDB;Trusted_Connection=True;");
        }


    }

Полный текст ошибки:

No suitable constructor was found for entity type 'MapperSattelite'. The following constructors had parameters that could not be bound to properties of the entity type: cannot bind 'targetplatform', 'cosparnumber', 'launchdate' in MapperSattelite(int id, string country, string name, string targetplatform, string cosparnumber, DateOnly launchdate)

Возникает либо при вызове метода Database.EnsureDeleted() в конструкторе ApplicationContext, либо, если убрать его, при попытке добавить первую сущность через метод db.Platforms.Add(mp). Текст ошибки при этом не меняется, ругается по-прежнему на второй класс, вернее на якобы отсутствие у него необходимого конструктора.

Пробовал:

  • Пересоздать БД
  • Пытался сопоставлять данные при помощи атрибута и метода (To)Table
  • Менял свойства класса, вроде все условия соблюдены, отличаются лишь регистром...

Ответы (0 шт):