Ich erstelle eine generische Methode, die viele Daten einfügen muss. Also verwende ich SqlBulkCopy zum Einfügen, Reflektion, um Werte von Objekten zu erhalten und MappingApi, um DB-Schema zu bekommen. Ich muss verschachtelte Objekte nicht einfügen, um es so einfach wie möglich zu halten.EF MappingApi gibt den Spaltennamen für die Elternklasse zurück
Ich versuche Tabellennamen wie folgt zu erhalten:
using (var ctx = GetStorage())
{
tableName = ctx.Db(typeof(T)).TableName;
}
Es ist für Basisklassen arbeiten, aber nicht für abgeleitete Klassen.
Schema:
public abstract class A
{
public int Id { get; set; }
}
public class B: A
{
public int Site_Id { get; set; }
}
public class AMap : EntityTypeConfiguration<A>
{
public AMap()
{
HasKey(t => t.Id);
Property(t => t.Id).IsRequired();
ToTable("A");
Property(t => t.Id).HasColumnName("Id");
}
}
public class BMap : EntityTypeConfiguration<B>
{
public BMap()
{
HasKey(t => t.Id);
Property(t => t.Id).IsRequired();
Property(t => t.Site_Id).IsRequired();
ToTable("B");
Property(t => t.Id).HasColumnName("Id");
Property(t => t.Site_Id).HasColumnName("Site_Id");
}
}
EF CRUD-Operationen auf diesem Schema arbeiten. EF sendet zwei Anfragen pro Operation zuerst für Klasse B und dann für Klasse A. Aber ctx.Db(typeof(B)).TableName == "A"
Irgendwelche Ideen, wie man dies werfen und richtigen Tabellennamen für die Klasse bekommen?