3

구성원으로이 같은 유형의 엔티티를지도하려고 노력하는 새로운 nHibernate 수로, 여기에 내 코드 I는 회원의 동일한 유형 (이 엔티티를 매핑하는 방법을 이해하려고 노력하고은 내가

public abstract class DEField : EntityWithSerializableId 
{ 
    public virtual Boolean IsVisibilityDepended { get; set; } 
    public virtual DEField VisibilityField { get; set; } 
    public virtual String VisibilityExpression { get; set; } 
} 

입니다 DEField). 이 엔티티는 nullable 일 수 있습니다.

답변

1

이 경우 매핑 (속성 유형은 엔터티와 동일 함)은 단순/표준 참조 매핑입니다. 좀 더 자세한 내용은 여기를 좀 걸릴 수 있습니다 : Fluent mapping

참조/대일 :

... 
References(x => x.VisibilityField); 

그리고 그것 뿐이다 있습니다. 이와 같은 경우에는 대개 부모 자녀 관계를 나타낼 수 있습니다. 따라서 DEField자체를으로, VisibilityField을 가리킬뿐만 아니라 참조하는 사람 (VisibilityField의 관점에서)을 알아야합니다. 1) 부모 참조 2) 어린이 모음 :

public abstract class DEField : EntityWithSerializableId 
{ 
    public virtual Boolean IsVisibilityDepended { get; set; } 
    public virtual String VisibilityExpression { get; set; } 

    public virtual DEField VisibilityField { get; set; } // Parent 
    public virtual IList<DEField> ChildFields { get; set; } // Children 
} 

그리고 좀 더 복잡한 매핑 예는 다음과 같이 수 :

public class DEFieldMap : ClassMap<DEField> 
{ 
    public DEFieldMap() 
    { 
    Table("DEFieldTable"); 
    LazyLoad(); 
    Id(x => x.Id) 
     .Column("Id") 
     .Not.Nullable()  
     .GeneratedBy.Identity(); 
    Map(x => x.IsVisibilityDepended); 
    Map(x => x.VisibilityExpression); 
    References(x => x.VisibilityField) 
     .Class<DEField>() 
     .Access.Property() 
     .Cascade.None() 
     .LazyLoad() 
     .Column("ParentId"); 
    HasMany<DEField>(x => x.ChildFields) // Children  
     .Access.Property() 
     .AsBag() 
     .Cascade.None() 
     .LazyLoad() 
     .Inverse() 
     .KeyColumn("ParentId"); 
    } 
} 
1

다른 클래스와 마찬가지로 XML에 many-to-one >을 사용하거나 다른 매핑 시스템과 동일해야합니다.