Как упростить бесконечное количество конструкций if при удалении объекта из конкретной таблицы БД (EF)?
Имеется вот такой ужас:
private void YesButton_Click(object sender, RoutedEventArgs e)
{
using(DetailsDbContext db = new DetailsDbContext())
{
if (currObj is AlternateResistor)
db.AlternateResistors.Remove((AlternateResistor)currObj);
else if(currObj is AnalogMicrocircuit)
db.AnalogMicrocircuits.Remove((AnalogMicrocircuit)currObj);
else if(currObj is CeramicCapacitor)
db.CeramicCapacitors.Remove((CeramicCapacitor)currObj);
else if (currObj is ComputerSystem)
db.ComputerSystems.Remove((ComputerSystem)currObj);
else if (currObj is ConstantResistor)
db.ConstantResistor.Remove((ConstantResistor)currObj);
else if (currObj is ElectrolyticCapacitor)
db.ElectrolyticCapacitors.Remove((ElectrolyticCapacitor)currObj);
else if (currObj is HighFreqConnector)
db.HighFreqConnector.Remove((HighFreqConnector)currObj);
else if (currObj is HighFreqDiode)
db.HighFreqDiodes.Remove((HighFreqDiode)currObj);
else if (currObj is Inductance)
db.Inductances.Remove((Inductance)currObj);
else if (currObj is LightDiode)
db.LightDiodes.Remove((LightDiode)currObj);
else if (currObj is LogicMicrocircuit)
db.LogicMicrocircuits.Remove((LogicMicrocircuit)currObj);
else if (currObj is LowFreqConnector)
db.LowFreqConnectors.Remove((LowFreqConnector)currObj);
else if (currObj is MembraneCapacitor)
db.MembraneCapacitors.Remove((MembraneCapacitor)currObj);
else if (currObj is RectifyingDiode)
db.RectifyingDiodes.Remove((RectifyingDiode)currObj);
else if (currObj is Relay)
db.Relays.Remove((Relay)currObj);
else if (currObj is Switcher)
db.Switchers.Remove((Switcher)currObj);
else if (currObj is Thyristor)
db.Thyristors.Remove((Thyristor)currObj);
else if (currObj is Transistor)
db.Transistors.Remove((Transistor)currObj);
else
db.ZenerDiodes.Remove((ZenerDiode)currObj);
db.SaveChanges();
}
isDeleted = true;
this.DialogResult = true;
}
currObj - объект типа Detail. В зависимости от того, какая деталь(наследник) лежит в currObj, вызывается метод удаления детали из нужной таблицы. Есть ли какой-то способ упростить это нечто?
Код ниже: класс-наследник DataContext:
public class DetailsDbContext : DbContext
{
public DbSet<AlternateResistor> AlternateResistors { get; set; }
public DbSet<AnalogMicrocircuit> AnalogMicrocircuits { get; set; }
public DbSet<CeramicCapacitor> CeramicCapacitors { get; set; }
public DbSet<ComputerSystem> ComputerSystems { get; set; }
public DbSet<ConstantResistor> ConstantResistor { get; set; }
public DbSet<ElectrolyticCapacitor> ElectrolyticCapacitors { get; set; }
public DbSet<HighFreqConnector> HighFreqConnector { get; set; }
public DbSet<HighFreqDiode> HighFreqDiodes { get; set; }
public DbSet<Inductance> Inductances { get; set; }
public DbSet<LightDiode> LightDiodes { get; set; }
public DbSet<LogicMicrocircuit> LogicMicrocircuits { get; set; }
public DbSet<LowFreqConnector> LowFreqConnectors { get; set; }
public DbSet<MembraneCapacitor> MembraneCapacitors { get; set; }
public DbSet<RectifyingDiode> RectifyingDiodes { get; set; }
public DbSet<Relay> Relays { get; set; }
public DbSet<Switcher> Switchers { get; set; }
public DbSet<Thyristor> Thyristors { get; set; }
public DbSet<Transistor> Transistors { get; set; }
public DbSet<ZenerDiode> ZenerDiodes { get; set; }
public List<Detail> GetData()
{
List<Detail> data = new List<Detail>();
data.AddRange(AlternateResistors.ToList());
data.AddRange(AnalogMicrocircuits.ToList());
data.AddRange(CeramicCapacitors.ToList());
data.AddRange(ComputerSystems.ToList());
data.AddRange(ConstantResistor.ToList());
data.AddRange(ElectrolyticCapacitors.ToList());
data.AddRange(HighFreqConnector.ToList());
data.AddRange(HighFreqDiodes.ToList());
data.AddRange(Inductances.ToList());
data.AddRange(LightDiodes.ToList());
data.AddRange(LogicMicrocircuits.ToList());
data.AddRange(LowFreqConnectors.ToList());
data.AddRange(MembraneCapacitors.ToList());
data.AddRange(RectifyingDiodes.ToList());
data.AddRange(Relays.ToList());
data.AddRange(Switchers.ToList());
data.AddRange(Thyristors.ToList());
data.AddRange(Transistors.ToList());
data.AddRange(ZenerDiodes.ToList());
return data;
}
protected override void OnConfiguring(DbContextOptionsBuilder opt)
=> opt.UseSqlite("Data Source= Detailsdata.db");
}