V minulých dílech jsme si prošli základní i některé pokročilé možnosti produktu ADO.NET Data Services. Jak jste si jistě všimli, veškerá data byla poskytována z Entity Frameworku. Však také ADO.NET Data Services nad Entity Frameworkem primárně staví. Co je ale zajímavé, je možnost poskytovat jako XML/ATOM nebo JSON pro téměř libovolné data.
reklama
V minulých dílech jsme si prošli základní i některé pokročilé možnosti produktu ADO.NET Data Services. Jak jste si jistě všimli, veškerá data byla poskytována z Entity Frameworku. Však také ADO.NET Data Services nad Entity Frameworkem primárně staví. Co je ale zajímavé, je možnost poskytovat jako XML/ATOM nebo JSON pro téměř libovolné data.
První co vás jistě napadne je využití LINQ to SQL DataContextu. A opravdu to jde. Ve skutečnosti je tato varianta velmi jednoduchá. Stačí zaměnit typ pro DataService<T> za DataContext a vše funguje bez dalších změn. Jediná nepříjemná vlastnost je ztráta možnosti provádět změny v datech. Pro tento případ je potřeba implementovat rozhranní IUpdatable. Pokud se chcete dozvědět více, doporučuji například tento zdroj.
Možnost použít LINQ to SQL však není zas až tak zajímavá, zvláště když Entity Framework nabízí bohatší možnosti. Mnohem zajímavější je použití vlastních kolekcí a objektů. Samozřejmě je třeba počítat v absencí implementace IUpdatable, podobně jako u LINQ to SQL. Nicméně i tak se jedná o zajímavou možnost.
První, co si vytvoříme, je naše třída. Např.:
public class Product
{
public int Key { get; set; }
public string Name { get; set; }
public int Price { get; set; }
public int QuantityOnStock { get; set; }
public bool SpecialOrderRequired { get; set; }
}
Aby výše uvedená třída mohla být použita, je třeba nadefinovat, který sloupec je klíčem. Zde je to property Key. Přidáme tedy třídě atribut DataServiceKey s tímto sloupcem jako parametr.
A vytvoříme si též vlastní data context. Pro naše účely naplníme kolekci ručně, v reálném scénáři bychom mohli objekty načítat například ze souboru. Aby se kolekce objevila ve webové službě, musí vlastnost vracet IQueryable a samozřejmě být veřejná. Velmi vhod zde přijde extension metoda AsQueryable().
public class MyDataContext
{
public IQueryable<Product> Products
{
get
{
return new List<Product>() {
new Product() { Key = 1, Name = "Phone", Price = 100, QuantityOnStock = 100, SpecialOrderRequired = false},
new Product() { Key = 2, Name = "PDA", Price = 999, QuantityOnStock = 2, SpecialOrderRequired = true}
}.AsQueryable<Product>();
}
}
}
Nyní nám již nic nebrání tato data vystavit. Jako typ DataService použijeme (v našem případě) MyDataContext a je hotovo. Kromě změn dat, je veškerá funkcionalita stejná jako při použití Entity Frameworku. Můžete tedy využít např. možnosti filtrování, které jsme představili v prvním resp. druhém díle.
Tímto dílem seriál o ADO.NET Data Services končí. Pokud máte dotazy, můžete využít prostor pod článkem či mě kontaktovat přímo, stejně jako můžete využít konference na tomto serveru.