2017-11-01 3 views
1

Da ich die folgende Person mit mehreren Sammlungseigenschaften haben ...Fluent NHibernate: Eager laden mehrere Sammlungen in Abbildung

public class Parent 
{ 
    public virtual int Id { get; set;} 
    public virtual ICollection<FirstChild> FirstChildren { get; set; } 
    public virtual ICollection<SecondChild> SecondChildren { get; set; } 
} 

Gibt es eine Möglichkeit kann ich gleichzeitig eifrig Last beide Eigenschaften fließend NHibernate? Oder laden Sie einfach alles, was mit dem Elternteil verbunden ist.

Wenn ich als mein Mapping den folgend habe ...

public ParentMapping() 
{ 
    Id(p => p.Id).GeneratedBy.Identity(); 

    HasMany(p => p.FirstChildren) 
     .Table("FirstChildren") 
     .KeyColumn("Id") 
     .Inverse() 
     .Cascade.AllDeleteOrphan() 
     .Fetch.Join(); 

    HasMany(p => p.SecondChildren) 
     .Table("SecondChildren") 
     .KeyColumn("Id") 
     .Inverse() 
     .Cascade.AllDeleteOrphan() 
     .Fetch.Join(); 
} 

Die Abbildung oben Ergebnisse in dem Fehler:

'Cannot simultaneously fetch multiple bags'.

Mit dem Fetch.Join() in der Mapping funktioniert, wenn ich Verwenden Sie es nur für eine der Eigenschaften.

Ich bin in der Lage, alles durch die Verwendung von ToFuture() Abfragen zu laden, aber ich würde es vorziehen, dies in der Zuordnung zu tun.

Antwort

0

Sie müssen ISet anstelle von ICollection verwenden, um diese Funktion zu verwenden.

Sie können einen Blick here und here werfen.

+1

Gibt es eine Möglichkeit, dies ohne Verwendung von ISet zu tun? Als ob ich Fetch.Join() für eine der Auflistungseigenschaften verwenden würde, funktioniert es einwandfrei. Es ist nur bei Verwendung für mehrere Eigenschaften, dass das Problem auftritt. – TomJerrum

Verwandte Themen