2014-08-30 4 views
0

코드 생성기는 nhibernate 매핑에서 일부 메타 데이터를 추출하고 생성해야하며 저장소 관계를 어떻게 유지하는지 궁금합니다.nhibernate 매핑 탐색

public class Person 
{ 
    public Detail {get;set;} 
} 

public class Detail 
{ 
    public Person {get;set;} 
} 

순회지도 :

PersistentClass map = _config.GetClassMapping(typeof(Person)); 
Property prop = map.GetProperty("Detail"); 

// how to find Associated Property (I.E. 'Detail.Person') 

답변

0

구성하고, 나중에 ISessionFactory 빌드 다른 측면이

도메인 모델 (하나 하나 개의 부분)에 저장하는 방법을 하나 개의 관계에 많은

그것으로부터, 끈기에 관한 정보를 보관하고있다. 엔티티 또는 콜렉션을 나타낼 수 있습니다.

다음

우리는 우리가 어떤 지속 된 클래스에 대해 무엇을 얻을 수 볼 수 있습니다

클래스 persister :

var entityType = typeof(TEntity); 
var factory = ... // Get your ISessionFactory 
var persister = factory.GetClassMetadata(entityType) as AbstractEntityPersister; 

그리고 우리는 또한 관찰 할 수있는 콜렉션 영속

수집 persister :

그래서, 일반적으로, 무슨 일이 매핑되는
// the Abstract collection persister 
var collectionPersister = factory 
    .GetCollectionMetadata(roleName) as AbstractCollectionPersister; 

// here we go: 
var isManyToMany = collectionPersister.IsManyToMany; 
var isOneToMany = collectionPersister.IsOneToMany; 

, 그것은 persister으로 표시됩니다.

var persister = factory.GetClassMetadata(entityType) as AbstractEntityPersister; 
var propertyNameList = persister.PropertyNames; 

foreach (var propertyName in propertyNameList) 
{ 
    // many info is in collections, so we need to know the index 
    // of our property 
    var index = persister.GetPropertyIndex(propertyName); 

    // with index, we can work with the mapped type 
    var type = persister.PropertyTypes[index]; 

    // if the type is OneToOne... we can observe 
    if(type is NHibernate.Type.OneToOneType) 
    { 
     Console.Write(type.IsAssociationType); 
     Console.Write(type.IsAnyType); 
     Console.Write(type.IsMutable); 
     Console.Write(type.IsCollectionType); 
     Console.Write(type.IsComponentType); 
     Console.Write(type.ReturnedClass); 
     ... 
     // many other interesting and useful info could be revealed 
    } 
} 
+0

감사합니다 : 그것은

확장, 위의 재료를 바탕으로

one-to-one을 찾을 수 있습니다 희망, one-to-one에 대한 명시 적 검색처럼 될 수 있습니다. 나는 일대일 관계에 대해 확신하지 못합니다. –

+0

당신이 무엇을 찾고 있는지 잘 모르겠지만 위와 같이 잔혹한 사람들과 함께, 우리는 많은 것을 조사 할 수 있습니다. 그리고 실제로, 당신이 말했듯이, 저는이 * 메타 *를 사용하여 자신의 빌드를 만듭니다 - 상위 레이어 메타 데이터 ... 도움이 되길 바랍니다 –

+0

다시 한번 감사드립니다. 나는 질문을 변경했습니다. –