私の質問は、ChildオブジェクトにParentオブジェクトプロパティを持たせる必要のない、親オブジェクトと子オブジェクトのFluent NHibernateマッピングが可能ですか?私は参照を親にマップする方法を理解していません。現状のマッピングでCreateを呼び出すと、子オブジェクトに必要な外部キー(データストアで必須)が親に戻っていないため、例外が発生します。Fluentの外部キーをオブジェクトプロパティなしのNHibernateにマップする
私は2つのPOCOクラスがあります。私は、親オブジェクトを作成することができるようにしたい
public Parent Create(Parent t)
{
using (this.session.BeginTransaction())
{
this.session.Save(t);
this.session.Transaction.Commit();
}
return t;
}
:
public class Parent
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual IList<Child> Childs { get; set; }
}
public class Child
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual int ParentId { get; set; }
}
そして、いくつかのマッピング:
public class ParentMap : ClassMap<Parent>
{
public ParentMap()
{
this.Table("Parents");
this.Id(x => x.Id);
this.Map(x => x.Name);
this.HasMany(x => x.Childs).KeyColumn("ChildId").Cascade.AllDeleteOrphan();
}
}
public class ChildMap : ClassMap<Child>
{
public ChildMap()
{
this.Table("Childs");
this.Id(x => x.Id);
this.Map(x => x.Name);
// Needs some sort of mapping back to the Parent for "Child.ParentId"
}
}
とメソッドを作成しますChildオブジェクトのリストを持っていますが、Childオブジェクトに親(親ID以外)の参照が戻っていません。 JSONのシリアライゼーションに問題が発生しているため、ParentからChildへの循環参照がParentオブジェクトに戻ってくるのを避けるために、これを実行したいと思います。
親プロパティ( 'Child')のプライベートフィールドをオプションにマッピングしていますか? –
これは私がやっていることですが、 'ParentId'プロパティでクエリを実行できないので、避けようとしています。オブジェクトを必要とせずに、外部キー制約付きのプロパティを列にマップできるはずです。 –
元の質問の場合、Felipeの答えは正しいです。エンティティを直接シリアル化しないで、最初にDTOまたはViewModelに変換し、最初に必要な構造を取得します。 –