Angenommen, wir haben dieses Modell:Erweiterungsmethoden mit Schnittstelle
public abstract class AbstractTableReferentielEntity {}
public class EstimationTauxReussite : AbstractTableReferentielEntity { }
Ich habe eine Erweiterungsmethode für alle Klassen, die von AbstractTableReferentielEntity erben.
public static EntityItemViewModel ToEntityItem<T>(this T entity)
where T : AbstractTableReferentielEntity {}
aber für eine bestimmte Art von AbstractTableReferentielEntity (wie EstimationTauxReussite), würde Ich mag eine bestimmte Aktion durchzuführen, so habe ich eine Methode zweite Verlängerung.
public static EntityItemViewModel ToEntityItem(this EstimationTauxReussite entity) {}
Alle Erweiterungen Methoden im gleichen Namensraum deklariert werden.
Danach, rufe ich einige Daten aus einer DB mit Entity Framework:
protected List<EntityItemViewModel> GetAllActifEntityItem<T>()
where T : AbstractTableReferentielEntity
{
return Context
.Set<T>()
.Where(item => item.IsActif)
.Select(item => item.ToEntityItem())
.ToList();
}
Es kompiliert.
Wenn T zur Laufzeit ein EstimationTauxReussite-Typ ist, geht es in die falsche Methode ToEntityItem
, wenn ich Select(item => item.ToEntityItem())
aufrufen. Es geht nicht auf die spezifischste Erweiterungsmethode ein. Irgendwelche Ideen ?
Eine Erweiterungsmethode sollte niemals Vorrang haben, daher ist dies ein merkwürdiges Verhalten. – NibblyPig
Haben Sie Änderungen an der Datenbank vorgenommen? Wenn ja, aktualisieren Sie das Entity Framework. Ich habe auch die gleiche Art von Problem, wenn ich Änderungen an der Datenbank mache. – Nivs
@Nivs, es hat nichts mit Entity Framework oder der Datenbank zu tun, nur weil Erweiterungsmethoden nur statische Methoden sind und daher nicht am Polymorphismus teilnehmen. –