2011-08-10 7 views
3

DbModelBuilderで定義されたテーブル情報を取得する方法はありますか?以下のようなef code first:データアノテーションなしのエンティティテーブル名を取得

何か:

entity.GetType().GetTableName() 

マックス

EDIT:

idは今

public static class Helper 
{ 
    public string GetTableName(Type type) { 
    // ?? 
    } 
} 

次実装したいと私はタイプ

でテーブル名を取得したいのですが
var type = someEntity.getType(); 
var sql = "delete from " + Helper.GetTableName(type) + " where id in (...)" 
+0

あなたが望むものを見つけ出すのが難しいほど詳細をいくつか追加できますか? –

+0

これが役立つことを願っています。http://stackoverflow.com/questions/5313008/how-can-i-extract-the-database-table-and-column-name-for-a-property-on-an-ef4-en/ 6909752#6909752 – RePierre

+0

これは最初のコードではありません:( – maxlego

答えて

1

私が想像できる解決策は、反射です。ここにあります。

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    // model mappings 

    base.OnModelCreating(modelBuilder); 

    // table mapping 
    var config = modelBuilder.Configurations 
     .GetPrivateFieldValue("_modelConfiguration") 
     .GetPrivateFieldValue("ActiveEntityConfigurations"); 

    var mapping = new Hashtable(); 
    foreach (var c in (IEnumerable)config) 
    { 
     var type = (Type)c.GetPrivateFieldValue("ClrType"); 
     var tableName = (string)c.GetPrivateFieldValue("EntitySetName"); 
     mapping[type] = tableName; 
    } 
    // store mapping whereever needed 
} 

主なアイデアは、base.OnModelCreatingが呼び出された後に設定オブジェクトを取得することです。

関連する問題