ObjectStateEntries
を繰り返し処理している間、[t]
変数名はMY_ENTITY
になると予想していました
foreach (ObjectStateEntry entry in context.ObjectStateManager.GetObjectStateEntries(EntityState.Deleted))
{
Type t = entry.Entity.GetType();
...
}
しかし、私は本当です
System.Data.Entity.DynamicProxies.MY_ENTITY_vgfg7s7wyd7c7vgvgv.....
現在のエントリをMY_ENTITY
タイプにキャストできるかどうかをどのように判断できますか?
プロキシタイプの元のエンティティタイプを取得するには
ObjectContext.GetObjectType(entity.GetType())
これは ObjectContext
の静的メソッドであるため、DbContext
環境ですぐに使用できます。
何らかの理由で実際のエンティティを元のタイプとして必要とする場合は、パターンを使用できます
var entity = entry.Entity as MyEntity;
if (entity != null)
{
...
}
これは少し効率的です
if (entry.Entity is MyEntity)
{
var entity = (MyEntity)entry.Entity;
...
}
後者のスニペットはオブジェクトを2回キャストするためです。
使用できます
_Type t = entry.Entity.GetType().BaseType;
_
または
_ObjectContext.GetObjectType(entity.GetType())
_
しかし、second
ウェイは、私の観点からbetterウェイです。 Mapperメソッド内でType()リクエストを呼び出す場合、たとえばDTOマッパー(エンティティオブジェクトからDTOクラスへ、またはメモリ内オブジェクトからDTOクラスへ)の場合、ObjectContext.GetObjectType(..)
はalways何に反する期待される結果.GetType().BaseType
たとえば、EFエンティティモデルに TPT(Table per Type) 戦略を使用する場合、メモリ内オブジェクトでBaseType()を呼び出すと、ObjectContext.GetObjectType(..)
別の方法は、返されたプロキシタイプのBaseType
プロパティにアクセスすることです。
Type t = entry.Entity.GetType().BaseType;