这种情况下的映射(属性类型与实体相同)是简单/标准的引用映射。您可以在这里查看更多详细信息:Fluent mapping
参考资料/多对一:
...
References(x => x.VisibilityField);
就是这样。在这种情况下,通常可以指示父子关系。因此,不仅您将自己引用DEField
为,而且它还应该知道(从 的角度来看)谁在引用它。1)父参考和 2)子集合:VisibilityField
VisibilityField
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");
}
}