Moje pytanie brzmi, czy istnieje możliwe mapowanie Fluent NHibernate dla obiektów Parent i Child, które nie wymagają, aby obiekt Child posiadał właściwość Parent obiektu? Nie wymyśliłem, jak zmapować odniesienie z powrotem do rodzica. Kiedy wołam Utwórz z odwzorowaniami tak jak jest, otrzymuję wyjątek, ponieważ obiekt Dziecko nie ma wymaganego klucza obcego (wymagane w składnicy danych) z powrotem do jednostki nadrzędnej.Mapowanie klucza obcego w Fluent NHibernate bez właściwości obiektu
Mam dwóch klas 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; }
}
a niektóre mapowania:
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"
}
}
I Tworzenie metody:
public Parent Create(Parent t)
{
using (this.session.BeginTransaction())
{
this.session.Save(t);
this.session.Transaction.Commit();
}
return t;
}
Chcę móc utworzyć obiekt nadrzędny, ma listę obiektów podrzędnych, ale nie ma obiektów podrzędnych, które odwołują się do swojego nadrzędnego (innego niż identyfikator rodzica). Chcę to zrobić, aby uniknąć odwołania cyklicznego z Parent do listy Childs z powrotem do obiektu Parent, ponieważ powoduje to problemy z serializacją JSON.
Czy odwzorowanie właściwości nadrzędnej (w polu "Dziecko") na pole prywatne jest opcją? –
To właśnie robię, chociaż staram się tego uniknąć, ponieważ nie mogę wtedy uruchamiać zapytań w właściwości 'ParentId'. Wygląda na to, że powinienem móc odwzorować właściwość z ograniczeniem klucza obcego do kolumny bez wymagania obiektu ... –
W przypadku pierwotnego pytania odpowiedź Felipe jest poprawna. Nie serializuj bezpośrednio obiektów, przekształć je najpierw w DTO lub ViewModel, otrzymując najpierw dokładnie taką strukturę, jaką chcesz. –