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)。このエンティティはnullableである可能性があります。

4

2 に答える 2

1

<many-to-one> を XML で使用する必要があります。または、他のクラスの場合と同様に、他のマッピング システムでも同等です。

于 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 に答える