2011-08-10 5 views
3

DbModelBuilder로 정의 된 테이블 정보를 가져 오는 방법이 있습니까? 같은처음 ef 코드 : 데이터 주석이없는 엔티티 테이블 이름

뭔가 :

entity.GetType().GetTableName() 

최대

편집 :

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이 호출 된 후 구성 객체를 얻는 것입니다.

관련 문제