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 …
}
|