3

我是會員新NHibernate的,這裏是我的代碼試圖映射與實體類型像它作爲

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

我想了解如何映射在其成員同類型(實體DEField)。該實體可以是,可以是空的

回答

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中的<多對一>,或者它與其他映射系統中的等效,就像您對任何其他類一樣。