2011-07-06 17 views

答えて

8

別の答えで述べたように、テーブル名が上記のコードはまた、プロキシをテストIObjectContextAdapter

private string GetTableName(DbEntityEntry ent) 
     { 
      ObjectContext objectContext = ((IObjectContextAdapter) this).ObjectContext; 
      Type entityType = ent.Entity.GetType(); 

      if (entityType.BaseType != null && entityType.Namespace == "System.Data.Entity.DynamicProxies") 
       entityType = entityType.BaseType; 

      string entityTypeName = entityType.Name; 

      EntityContainer container = 
       objectContext.MetadataWorkspace.GetEntityContainer(objectContext.DefaultContainerName, DataSpace.CSpace); 
      string entitySetName = (from meta in container.BaseEntitySets 
            where meta.ElementType.Name == entityTypeName 
            select meta.Name).First(); 
      return entitySetName; 
     } 

を用いて得ることができます。これは長い時間前に元のポスターが解決されたと仮定して、このリンクに来る他の誰かを助けてくれることを願っています。

+0

これは、FYIのテーブル名ではなく、エンティティ名を取得します。 –

+0

@PhilSandlerあなたが正しいです、どのようにテーブル名を取得できますか? – tkt986

+0

テーブル名を取得する方法はこちらhttp://haliller.com/2014/04/08/ef6-1-mapping-between-types-tables/ (EF 6.1と仮定) – Quails4Eva

0

DbContextからを実際に(IObjectContextAdapterにキャストして)入手し、あなたが見た例を使用することができます。

0

msdnについては、DbContextのドキュメントを参照してください。明示的にIObjectContextAdapterが実装されていることがわかります.DbContextを取得するコンテキストをIObjectContextAdapterにキャストし、ObjectContextプロパティを使用します。

+2

エンティティ名はどのように取得できますか? –

5

私は、より洗練された方法で、msdnを見つけてプロキシ名を取り除いた。

private string GetTableName(DbEntityEntry ent) 
{ 
    return ObjectContext.GetObjectType(entry.Entity.GetType()).Name; 
} 
関連する問題