Wie kann ich die Fetchmode setzen auf allen Verbänden eines nHibernate ICriteria in einem Rutsch?

StackOverflow https://stackoverflow.com/questions/1951359

Frage

ich ein Objekt, das viele assocations zu anderen Objekten hat. All dies sind träge durch nHibernate, geholt, die in fast allen Fällen gut.

In einem bestimmten Szenario, in diesem Fall ein Export von vielen Aufzeichnungen, möchte ich auf alle Verbände die Fetchmode zu eifrig setzen. Gibt es eine Möglichkeit, dies zu tun, ohne manuell jedes angeben, mit:

ICriteria crit = CreateCriteria().
  .SetFetchMode("Address", FetchMode.Eager)
  .SetFetchMode("ContactPerson", FetchMode.Eager);

Das Verfahren würde Ich mag, finden, aber nicht in der Lage zu:

// This doesn't work.
ICriteria crit = CreateCriteria().SetFetchMode(FetchMode.Eager);
War es hilfreich?

Lösung

Nein, es gibt keine Möglichkeit, dies in einer Decke Art und Weise zu tun.

Andere Tipps

Sie könnten versuchen, die NHibernate Metadaten zu verwenden.

ISessionFactory sessionFactory;

Type type = typeof(MyEntity);
IClassMetadata meta = sessionFactory.GetClassMetadata(type);
foreach (string mappedPropertyName in meta.PropertyNames)
{
    IType propertyType = meta.GetPropertyType(mappedPropertyName);
    if (propertyType.IsAssociationType)
    {
      // initialize property
      // recursively go through the properties of the associated entity
    }

    if (propertyType.IsCollectionType)
    {
      // initialize collection
      // if it is a collection of entities, 
      // recursively go through the properties of the associated entity

      // Use NHibernateUtil.Initialize
    }
}

Ich bin mir nicht sicher, ob es ist die Mühe wert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top