Výzva - lokální databáze

V tuto chvíli by se mohlo zdát, že naše aplikace je hotova. Postačující bude ji jen poskládat a předat k užívání.

Aktualizace dat

Co je však třeba si uvědomit, že toto nemá sloužit jako jednorázové naplnění webu a bude třeba přidávat nové produkty, případně si maličko pohrát s rozvržením a úpravou statických textů, které budou přidávány ke každému produktu.

Je tedy nutné zajistit, aby se nové položky do publikačního systému vložily a položky již jednou vložené pouze aktualizovaly. Pro zajištění tohoto úkolu jsem si vybral lokální datový soubor a využil jsem tak možností SQL Server Compact Edition v. 3.5. Za atributy, které je nutné sledovat jsem si stanovil Id, které je každému příspěvku přiděleno publikačním systémem WordPress a také ASIN, který představuje identifikátor na straně vstupních dat. Dále jsem se rozhodl též ukládat si atribut Title a Publisher a pro informaci též datum vystavení (publikace).

Tyto všechny atributy se mi vešly do jedné tabulky, kterou jsem nadefinoval z prostředí Visual Studio. Pro přístup a manipulaci s daty jsem si potom vybral LINQ to SQL, který dokáže pracovat právě i s touto lokální databází. Podpora v designeru Visual Studia však v současné chvíli chybí a tak je třeba použít nástroje sqlmetal.exe. Mě se v těchto případech osvědčilo použití .bat souboru, který obsahuje následující definice:

"c:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\sqlmetal.exe" /dbml:ArchiveModel.dbml ArchiveDb.sdf
"c:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\sqlmetal.exe" /namespace:Vyzva.Data.Archive /serialization:Unidirectional /context:ArchiveDataContext /language:csharp /pluralize /code:ArchiveModel.cs /map:ArchiveModel.config ArchiveModel.dbml

Samozřejmě můžete vynechat vytvoření mapovacího souboru, osobně však tomu dávám přednost mít jej vygenerovaný znovu a s koncovou .config

Takto vygenerované soubory tedy postačuje vložit do projektu, u .config souboru, kde jsou uloženy mapovací informace nastavit jeho Build type na Embedded resource, tak aby došlo ke vložení souboru do assembly a začít používat DataContext objekt. V tomto případě, kdy se negenerují atributy nad třídou a vlastnotmi, je třeba při vytváření instance DataContextu předat též odkaz na mapovací schéma a connection string.

if (_mappingSource == null) {
  using (Stream st = Assembly.GetExecutingAssembly().GetManifestResourceStream("Vyzva.Data.Archive.ArchiveModel.config")) {
    _mappingSource = XmlMappingSource.FromStream(st);
  }
}
string conn = ConfigurationManager.ConnectionStrings["DbMainConn"].ConnectionString;
context = new ArchivDataContext(conn, _mappingSource);

Proměnnou _mappingSource mám v tomto případě definovanou v mé Factory třídě jako statickou, neboť není nutné při každém požadavku na DataContext vytvářet a parsovat znovu mapovací schéma.

Tímto mám zaručenu základní funkcionalitu a umožněnu práci s lokální databází.

Jak by to probíhalo

Ani tento krok se zdá, že by nemusel být učiněn v součinnosti s Petřinými požadavky. Co by však stálo za úvahu je definovat si seznam atributů, které budou v této lokální databázi uchovávány a případně další požadavky. Docela dobře si dokáži představit, že by mohl být učiněn požadavek na změnu kategorie, případně její hromadné doplnění k vybraným produktům, případně jiná úprava, která nelze zajistit v exportu xml souboru.

Časový odhad

Definice struktury databáze, vygenerování souborů pomocí sqlmetal.exe a práce s tím spojené zabrali přibližně 30 minut. Ani zde, obdobně jako v předchozím kroku se nedají očekávat nějaká větší časová zdržení.

Add a Comment