Krzysztof Radzimski

Pasja tworzenia

XPO Pobieranie instancji obiektu

16 styczeń
Opublikował Krzysztof Radzimski 16. stycznia 2009 15:08

W obiektach XPO, nie znajdują się typowe dla innych ORM metody do pobierania konkretnych obiektów danego typu. W wielu wypadkach zdarza się, że do pobrania jednej instancji obiektu używa się obiektu XPCollection, co nie jest optymalnym rozwiązaniem. W takim przypadku z pomocą przychodzi metoda obiektu Session (DevExpress.Xpo) FindObject.

session.FindObject(type, CriteriaOperator.Parse(criteria)) as XpoObject;
Przykładowa metoda Load będzie wyglądać następująco:
 /// <summary> 
/// Zwraca wskazany obiekt danego typu poprzez podanie
/// kryteriów wyszukiwania (kwerendy). 
/// </summary> 
/// <param name="session">Sesja XPO.</param> 
/// <param name="criteria">Kryteria.</param> 
/// <param name="type">Typ obiektu.</param> 
/// <returns></returns> 
public static XpoObject Load(
    Session session, string criteria, 
        Type type)
{
    if (!criteria.Contains(
        "Deleted = false"))
    {
        if (criteria.Trim() != 
            String.Empty)
            criteria += " AND Deleted = false";
        else criteria = "Deleted
            = false";
    }

    return session.FindObject(type, 
        CriteriaOperator.Parse(criteria)) as XpoObject;
}

gdzie XpoObject jest naszą klasą abstrakcyjną. Przykładowe użycie tu flagi Deleted jest praktycznym przykładem przygotowaniu warunku występującego w każdym obiekcie dziedziczącym po XpoObject.

Jak użyć tej metody? Załóżmy, że klasa ProjectFile dziedziczy po XpoObject. Wywołanie metody Load wygląda następująco.

ProjectFile p = ProjectFile.Load(DevExpress.Xpo.XpoDefault.Session,
 Convert.ToInt32(context.Request["Key"]), 
typeof(ProjectFile)) as ProjectFile;

Kolejnym przykładem wykorzystania metody Session.FindObject jest użycie jej do zbadania czy obiekt o zadanych kryteriach istnieje. Utwórzmy metodę Exist korzystającą z Load.

/// <summary> 
/// Zwraca flagę informującą czy obiekt o wskazanych kryteriach istnieje. 
/// </summary> /// <param name="session">Sesja XPO.</param> 
/// <param name="criteria">Kryteria.</param> 
/// <param name="type">Typ obiektu.</param> 
/// <returns></returns> 
public static bool Exists(Session session,
string criteria, Type type)
{
    return Load(session, criteria, type) != 
        null;
}

Jak użyć tej metody? Załóżmy, że klasa ProjectFile dziedziczy po XpoObject. Wywołanie metody Exists wygląda następująco.

 if(ProjectFile.Exists(DevExpress.Xpo.XpoDefault.Session, Convert.ToInt32(context.Request["Key"]),
   typeof(ProjectFile)))
{ 
  // jeżeli plik projektu istnieje to …
}

Tagi: | Kategorie: DevExpress | Programowanie

Wyślij link na adres e-mail | Link do tego postu | RSSRSS comment feed