Mam następujący klasa abstrakcyjna, nazwany Sector
:Entity Framework Core: Jak dynamicznie uzyskać DbSet z typu pochodnego?
public abstract class Sector
{
public string ID {get; set;}
public string Name {get; set;}
public Sector(){}
}
A druga klasa, GICSSector
, wich dziedziczy Sector
:
public class GICSSector: Sector
{
public virtual ICollection<GICSIndustryGroup> IndustryGroups {get; set;}
}
Mam następujący DbSet
w moim DbContext
:
public DbSet<GICSSector> GICSSectors {get; set;}
Próbuję napisać ogólny sposób ładowania d ata z pliku CSV, tworzenie obiektów w locie, a następnie przechowywać przedmioty w mojej bazy danych SQLLite:
public static void UpdateEntitiesFromCSV<T>(MyContextFactory factory, string fileName) where T : class
{
var entities = new List<T>();
// ... Load entities from the CSV
// ... Create the objects and add them to the list
// Add the objects to the database
using (var db = factory.Create(new DbContextFactoryOptions()))
{
var set = db.Set<T>();
foreach(T e in entities)
{
set.Add(e);
}
db.SaveChanges();
}
}
używam biegle API do zarządzania tabele:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
//...
// GICSSector
modelBuilder.Entity<GICSSector>().HasKey(s => new { s.ID });
modelBuilder.Entity<GICSSector>().Property(s => s.ID).HasMaxLength(2);
modelBuilder.Entity<GICSSector>().Property(s => s.Name).IsRequired();
modelBuilder.Entity<GICSSector>().Property(s => s.Name).HasMaxLength(50);
}
Gdybym uruchomić kod Mam następujący wyjątek: Błąd SQLite 1: "brak takiej tabeli: sektory".
Gdybym sprawdzić typ z typeof(T)
lub za pomocą myEntity.GetType()
uzyskać ten sam oczekiwany wynik: MyNamespace.GICSSector
Dlaczego EF Rdzeń chce przechowywać go w tabeli o nazwie „sektorów” (typu bazowego), a nie oczekiwane GICSSectors?
Jak mogę to naprawić?
Notatka: Metoda jest ogólna, która nie będzie używana do obsługi tylko klas dziedziczących po Sector
.
opisywanie klasę GICSSector z TableAttribute? – MarkB
Używam płynnego API, zaktualizowałem pytanie –
Następnie użyj płynnego API do ustawienia nazwy tabeli? (zobacz moją odpowiedź) – MarkB