シンプル:DbEntityEntryオブジェクトからマップされたテーブル名を取得するにはどうすればよいですか?私はDbContextを拡張したクラスの中にいます。私はObjectContextの例を見てきましたが、CFには適用されません。DbEntityEntry(コードファースト)からテーブル名を取得
ありがとうございました。
シンプル:DbEntityEntryオブジェクトからマップされたテーブル名を取得するにはどうすればよいですか?私はDbContextを拡張したクラスの中にいます。私はObjectContextの例を見てきましたが、CFには適用されません。DbEntityEntry(コードファースト)からテーブル名を取得
ありがとうございました。
別の答えで述べたように、テーブル名が上記のコードはまた、プロキシをテスト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;
}
を用いて得ることができます。これは長い時間前に元のポスターが解決されたと仮定して、このリンクに来る他の誰かを助けてくれることを願っています。
DbContext
からを実際に(IObjectContextAdapter
にキャストして)入手し、あなたが見た例を使用することができます。
msdnについては、DbContextのドキュメントを参照してください。明示的にIObjectContextAdapterが実装されていることがわかります.DbContextを取得するコンテキストをIObjectContextAdapterにキャストし、ObjectContextプロパティを使用します。
エンティティ名はどのように取得できますか? –
私は、より洗練された方法で、msdnを見つけてプロキシ名を取り除いた。
private string GetTableName(DbEntityEntry ent)
{
return ObjectContext.GetObjectType(entry.Entity.GetType()).Name;
}
これは、FYIのテーブル名ではなく、エンティティ名を取得します。 –
@PhilSandlerあなたが正しいです、どのようにテーブル名を取得できますか? – tkt986
テーブル名を取得する方法はこちらhttp://haliller.com/2014/04/08/ef6-1-mapping-between-types-tables/ (EF 6.1と仮定) – Quails4Eva