Domanda

1) Per impostazione predefinita, gli elementi di configurazione hanno l'attributo connectionStringName impostato su LocalSqlServer e, per quanto ne so, questo attributo si riferisce alla connessione definita in nel file machine.config .

a) Suppongo che questa stringa di connessione si riferisca al database aspnetdb.mdf ?!

b) Comprendo che aspnetdb.mdf viene utilizzato nei casi in cui non & # 8217; t creiamo manualmente un database di appartenenza o di profilo (chiamando aspnet_regsql ), ma continuo a non & # 8217; t comprendere lo scopo degli elementi di configurazione con l'attributo connectionStringName impostato su LocalSqlServer impostato? Vale a dire, quando e perché dovrebbero accedere a questo database?

c) Cosa succede se impostiamo manualmente il database di appartenenza tramite aspnet_regsql e quindi non & # 8217; utilizzare aspnetdb.mdf ? In che modo gli elementi di configurazione sapranno che & # 8217; non stiamo usando aspnetdb.mdf e quindi tenteremo di accedere al database che abbiamo creato?

2) Se volessimo che LocalSqlServer da machine.config puntasse ad un altro file di database, potremmo fare quanto segue:

      <connectionStrings>
        <remove name="LocalSqlServer" />
        <add name=”LocalSqlServer” ...  />
      </connectionStrings>

Comprendo che lo scopo dell'elemento <remove> è quello di cancellare tutti gli elementi precedentemente dichiarati con lo stesso nome, ma nell'esempio sopra abbiamo semplicemente cambiato l'attributo di connessione già esistente e come tale machine.config non & # 8217; t ha due connessioni con lo stesso nome, quindi perché abbiamo dovuto includere <=> elemento?

Grazie

È stato utile?

Soluzione

Dall'articolo connectionStrings element su MSDN :

  

Stringhe di connessione contenute   in un file di configurazione principale sono   ereditato, a meno che non sia l'elemento clear   utilizzato nel file di configurazione figlio.   Il seguente valore predefinito   L'elemento connectionStrings è   configurato nel file Machine.config.   Copia codice

<connectionStrings>
    <add name="LocalSqlServer" connectionString="data source=.\SQLEXPRESS;Integrated
        Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User
        Instance=true" providerName="System.Data.SqlClient" />
</connectionStrings>

Quindi, se quella sezione del file di configurazione non viene modificata, ha automaticamente quella stringa di connessione.

Altri suggerimenti

La convenzione utilizzata è una delle tante che avrebbero potuto essere scelte per svolgere lo stesso compito, ma le persone che all'epoca erano nel team ASP.NET di MS sono davvero le uniche che possono dire " & perché quot; è stato utilizzato quel set di convenzioni. La mia comprensione è che lo scopo della configurazione attuale è di rendere il più semplice possibile iniziare un principiante. vale a dire eseguire alcuni wizard, generare automaticamente database con impostazioni preconfigurate, trascinare e rilasciare alcuni controlli di sicurezza e hanno qualcosa con cui lavorare. Poiché questo è stato progettato per i principianti, gli sviluppatori più esperti si imbattono nella stessa serie di domande che stai avendo ora perché scavare nel modo in cui i pezzi si incastrano non è semplice.

Una delle cose che noterai in machine.config è che tutti i provider (appartenenza, ruoli, profilo, ecc.) usano questo nome di stringa di connessione LocalSqlServer, che supporta nuovamente lo scenario per principianti. Pertanto, per utilizzare il proprio database, è necessario rimuovere la definizione predefinita di LocalSqlServer e definire il proprio. Non esiste un elemento di sostituzione nella definizione del file di configurazione, quindi è necessario utilizzare la sequenza di rimozione / aggiunta, che è l'equivalente logico. Modificando la stringa di connessione e lasciando il nome come LocalSqlServer, tutti i provider in machine.config vengono puntati sul proprio DB. Questo ti dà le definizioni predefinite del provider per il tuo database.

Ora, se si desidera personalizzare le definizioni del provider, è possibile aggiungerle al proprio Web.config e modificarne le impostazioni. A quel punto, è possibile lasciare LocalSqlServer come stringa di connessione per le definizioni del provider personalizzato oppure è possibile creare la propria stringa di connessione e quindi puntare le definizioni del provider personalizzato sulla propria stringa di connessione e non sarà più necessario preoccuparsi di LocalSqlServer. Se rimuovi LocalSqlServer dal tuo web.config, dovrai aggiungere definizioni personalizzate del provider al tuo web.config che fanno riferimento alla tua stringa di database.

Spero che questo aiuti,

Joe

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top