Adatbázis fejelsztés VS2010-el: Database Project

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 Smile

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:

  1. Indítsuk el a Visual Studio Command Prompt (2010)-et.
  2. 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:

  1. Nyomjunk jobb gombot a References elemen, majd válasszuk ki az Add Database Reference menüpontot.
    image
  2. Válasszuk ki a generált dbschema file-t, majd az alábbiak szerint állítsuk be a referencia tulajdonságokat:image

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:

image

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.

Add comment