by lucabaldini » 8 March 2011, 18:51
Spiego come funziona l'IDManager.
Supponiamo che la tua applicazione web (contenuta nel progetto In.de), utilizzi 3 database: DB1, DB2 e DB3. Poi, a run-time cambiando la stringa di connessione, la tua applicazione utilizza 35 database: 15 sono repliche del DB1 contenuto nel progetto, 12 repliche del DB2 e 8 repliche del DB3.
Ora quando aggiorni la tua applicazione web, devi aggiornare tutti i 35 database!
Il manager affronta il problema in questo modo. Dentro al manager ogni applicazione web può contenere un elenco di database. Ogni database ha una propria chiave primaria che permette di distinguerlo dagli altri e anche una proprietà chiamata "Guid In.de" che è appunto il GUID del database contenuto nel progetto (DB1, DB2 e DB3 nel tuo caso).
Quindi, per configurare correttamente il manager, occorre creare 35 database dentro all'applicazione: 15 con connection string differenti ma aventi tutti lo stesso GUID del DB1, 12 con connection string differenti ma con il GUID In.de del DB2 e 8 con il GUID In.de del DB3.
Quando pubblichi In.de contatta il manager e lo informa che la tua applicazione utilizza 3 database: DB1, DB2 e DB3. Il manager analizza la lista dei database dell'applicazione e ne fa una "distinct" raggruppandoli per GUID In.de. Per ogni "gruppo" prende il primo e calcola le differenze tra il corrispondente DB dentro al progetto e il DB fisico. Quindi, In.de ottiene 3 script di modifica del DB: uno per i database di tipo DB1, uno per i database di tipo DB2 e uno per i database di tipo DB3. Quando, poi, viene avviata la pubblicazione, il manager cicla su tutti 35 i database. Per ognuno di questi esegue lo script di modifica giusto.
Quindi la risposta è sì, è possibile utilizzando In.de aggiornare tutti e 35 i database della mia applicazione anche se dentro In.de ne ho solo 3. Tutto questo funziona, ovviamente, se tutti i "gruppi" di database sono effettivamente nello stesso stato... se i db dello stesso gruppo si trovano in stati differenti la pubblicazione potrebbe fallire.