В чем причина возникновения "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
- Менял свойства класса, вроде все условия соблюдены, отличаются лишь регистром...