我的問題是,有沒有可能對父對象和子對象有一個可能的Fluent NHibernate映射,它不需要具有父對象屬性的子對象?我還沒有想出如何將參考映射回父。當我按照原樣調用Create時,我得到一個異常,因爲Child對象沒有所需的外鍵(在數據存儲中是必需的)返回給Parent。在沒有對象屬性的情況下映射流暢NHibernate的外鍵
我有兩個POCO類:
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"
}
}
,並創建方法:
public Parent Create(Parent t)
{
using (this.session.BeginTransaction())
{
this.session.Save(t);
this.session.Transaction.Commit();
}
return t;
}
我希望能夠創建一個父對象有一個Child對象的列表,但沒有Child對象的引用返回到它們的Parent(除了父ID)。我想這樣做是爲了避免從Parent到Parent對象的循環引用,因爲這會導致JSON序列化的問題。
是否將父屬性(在'Child')映射到專用字段的選項? –
這就是我正在做的,雖然我試圖避免它,因爲我不能然後在'ParentId'屬性上運行查詢。似乎我應該能夠將外鍵約束屬性映射到列而不需要對象... –
對於原始問題,Felipe的答案是正確的。不要直接序列化實體,首先將它們轉換爲DTO或ViewModel,首先獲得您想要的確切結構。 –