Annó a Visual Studio 2008-hoz a Microsoft adott egy kiegészítőt – Database Edition GDR – ami nem is volt olyan rossz. Voltak hiányosságai, de szereintem még mindig jobban lehetett vele dolgozni SCM környezetben, mint az SSMS-el. Aki a Visual Studio 2010 Premium vagy Ultimate Edition-t használja, annak az alábbi project típusok állnak rendelkezésre:
- SQL Server 2005/2008 Database Project
- SQL Server 2005/2008 Server Project
- SQL Server 2005/2008 Wizard
- SQL Server Data-tier Application
- Visual C#/Basic SQL CLR Database Project
Elég régóta használom ezeket a project típusokat, ezért szeretnék megosztani egy érdekes fejlesztési módot a Database Project-tel, amely Microsoft Project Server 2007 és 2010 egyedi fejlesztése során alkalmaztunk. A mintákat az AdventureWorks2008R2 adatbázis segítségével fogom bemutatni.
Feladat
Szeretnénk új, egyedi funkciókkal bővíteni a Project Server-t és ehhez szeretnénk adatokat is tárolni, melyek hivatkoznak Project Server adatbázisaiban található objektumokra.
A probléma
A Project Server 4 adatbázist használ:
- Draft
- Published
- Reporting
- Archive
A Microsoft *csak* a Reporting adatbázisban engedélyez változtatásokat, melyek *csak* új objektumok létrehozását és ezek változtatását jelenti. A többi adatbázisban nem lehet semmi változtatást csinálni. Persze lehet, de nem ajánlott
Lehetséges megoldások
- Használjuk a Reporting adatbázist és abba tegyük bele a saját objektumainkat: ez nagyon előnyös tud lenni, ha nem érdekes a skálázás, illetve nem akarunk túl sokat törödni a biztonsági beállításokkal.
- Használjunk saját adatbázist. Ez a legtisztább megoldás, de sokkal komolyabb biztonsági tervezést igényel.
Mindkét esetben szükségünk van egy un. dbschema file-ra. Ezt az alábbi módon tudjuk legenerálni:
- Indítsuk el a Visual Studio Command Prompt (2010)-et.
- Futtassuk le az alábbi parancsot:
vsdbcmd /a:Import /cs:"Data Source=<sqlserver_hostname>; Initial Catalog=<database_name>; Integrated Security=SSPI;" /dsp:Sql /model:C:\temp\<database_name>.dbschema
Ezek után be tudjuk importálni az adatbázist a VS Soltion-ba az alábbiak szerint:
- Nyomjunk jobb gombot a References elemen, majd válasszuk ki az Add Database Reference menüpontot.
- Válasszuk ki a generált dbschema file-t, majd az alábbiak szerint állítsuk be a referencia tulajdonságokat:
Az $(SQLServerNetworkName) és a $(DatabaseName) változókra ebben az esetben nem lesz szükség, mert ugyan abba az adatbázisba fogunk dolgozni. A Supress errors caused by unresolved referecnes in the referenced project legyen kijelölve, ezzel sok problémától kímélheetjük meg magunkat. Ezzel gyakorlatilag kiküszöböltük azt az esetet, amikor a referencia adatbázis másik adatbázisra is mutat.
Miután a fentiek megtörténtek, akkor a hivatkozott adatbázis objektumait simán fel tudjuk használni a saját kódunkban is, lásd:
Abban az esetben, amikor külön adatbázist használunk, akkor a két fentebb említett változó is bejön a képbe. Ebben az esetben a fenti “lekérdezés” az alábbi módon nézne ki:
SELECT * FROM [$(SQLServerNetwrokName)].[$(DatabseName)].[HumanResources].[Department]
Vegyük észre, hogy a Solution Explorer-ben a Properties alatt van egy Database.sqlcmdvars file. A két fenti változó ebben található meg az alapértelmezett változók mellett. Ebből érdemes környezetenként – teszt, QA, production – külön-külön verziót csinálni és ezeket használni a project beállításainál.