、私は次の階層的なエンティティにマッピングしようとしています:このClassMappingで階層エンティティの親キー
public class BusinessType
{
public virtual Guid BusinessTypeId { get; set; }
public virtual Guid? ParentBusinessTypeId { get; set; }
public virtual String BusinessTypeName { get; set; }
public virtual ICollection<BusinessType> Children { get; set; }
}
を:
public class BusinessTypeMapper : ClassMapping<BusinessType>
{
public BusinessTypeMapper()
{
Id(x => x.BusinessTypeId, x => x.Type(new GuidType()));
Property(x => x.ParentBusinessTypeId, x => x.Type(new GuidType()));
Property(x => x.BusinessTypeName);
Set(x => x.Children,
cm =>
{
// This works, but there is an ugly string in here
cm.Key(y => y.Column("ParentBusinessTypeId"));
cm.Inverse(true);
cm.OrderBy(bt => bt.BusinessTypeName);
cm.Lazy(CollectionLazy.NoLazy);
},
m => m.OneToMany());
}
}
これは正常に動作しますが、私リファクタリングが機能するようにラムダを使ってリレーションのキーを指定することができます。これは以下のように、利用可能であるように思わ:
public class BusinessTypeMapper : ClassMapping<BusinessType>
{
public BusinessTypeMapper()
{
Id(x => x.BusinessTypeId, x => x.Type(new GuidType()));
Property(x => x.ParentBusinessTypeId, x => x.Type(new GuidType()));
Property(x => x.BusinessTypeName);
Set(x => x.Children,
cm =>
{
// This compiles and runs, but generates some other column
cm.Key(y => y.PropertyRef(bt => bt.ParentBusinessTypeId));
cm.Inverse(true);
cm.OrderBy(bt => bt.BusinessTypeName);
cm.Lazy(CollectionLazy.NoLazy);
},
m => m.OneToMany());
}
}
問題は、これが既に設定さParentBusinessTypeId
を無視して、businesstype_key
という列を生成するためにNHibernateのを引き起こすことがあります。 NHibernateに文字列ではなくリレーションを指定するラムダを使用させる方法はありますか?
'public virtual BusinessType Parent {get;セット; } '? – Firo
それは私の質問の問題を解決するのに役立ちますか?私は子供から親に移動する必要はありません。親から子供まで、私は必要とは考えていませんでした。 –