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)中具有相同类型的实体。该实体可以为

4

2 回答 2

1

您应该在 XML 中使用 <many-to-one>,或者它在其他映射系统中是等效的,就像对任何其他类一样。

于 2013-01-23T10:21:46.620 回答
1

这种情况下的映射(属性类型与实体相同)是简单/标准的引用映射。您可以在这里查看更多详细信息:Fluent mapping

参考资料/多对一:

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

就是这样。在这种情况下,通常可以指示父子关系。因此,不仅您将自己引用DEField为,而且它还应该知道(从 的角度来看)谁在引用它。1)参考和 2)子集合VisibilityFieldVisibilityField

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");
  }
 }
于 2013-01-27T16:56:33.633 回答