unerwartete GetType() Ergebnis für entity-Eintrag
Während ich Durchlaufen ObjectStateEntries
ich erwartet [t]
variable name wird MY_ENTITY
foreach (ObjectStateEntry entry in context.ObjectStateManager.GetObjectStateEntries(EntityState.Deleted))
{
Type t = entry.Entity.GetType();
...
}
aber real habe ich
System.Data.Entity.DynamicProxies.MY_ENTITY_vgfg7s7wyd7c7vgvgv.....
Wie kann ich bestimmen kann, und ich warf aktuellen Eintrag zu MY_ENTITY
geben?
- Haben Sie versucht, zu vergleichen mit der
is
keyword? - ja,das funktioniert.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie den original-entity-Typ des proxy-Typ
Dies ist ein die statische Methode
ObjectContext
, so können Sie leicht die Nutzung in einemDbContext
Umgebung.Wenn aus irgendeinem Grund müssen Sie die aktuelle Person als seinem ursprünglichen Typ, den Sie verwenden können das Muster
Dies ist etwas effizienter als
weil letztere snippet CASTET das Objekt zweimal.
Equals()
, wie die standard -GetType()
gibt den proxy, das ist nicht das gleiche wie die zugrunde liegenden Typ.if (entry.Entity is myEntity entity) { ... }
die deklarieren und zuweisenentity
Können Sie
oder
Aber die
second
Weg ist ein besser Weg aus meiner Sicht. Wenn Sie den Anruftyp () - Aufruf innerhalb einer Mapper-Methode, zum Beispiel DTO mapper (von entity-Objekt DTO Klasse oder aus der in-memory-Objekte DTO-Klasse),ObjectContext.GetObjectType(..)
gewähren Sie immer das erwartete Ergebnis im Gegensatz zu dem, was wird.GetType().BaseType
Zum Beispiel, wenn Sie eine TPT (Tabelle pro Typ) Strategie für EF-Entity-Modell, call-BaseType (), die auf in-memory-Objekt wird zurückgegeben, die Basisklasse in der Hierarchie-im Gegensatz zu dem, was wird
ObjectContext.GetObjectType(..)
Andere Möglichkeit ist auf die
BaseType
Eigenschaft des zurückgegebenen proxy-Typ: