2013-05-23 2 views
9

Ho appena creato una nuova applicazione, aggiunto EntityFramework 5 tramite NuGet, creato un DbContext molto semplice e salvato alcuni dati su di esso.Dov'è il mio database e come lo visualizzo?

Dove sono esattamente i miei dati e come li visualizzo? Il non modificato App.config ha aggiunto è

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <configSections> 
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> 
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
    </configSections> 
    <startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> 
    </startup> 
    <entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> 
     <parameters> 
     <parameter value="v11.0" /> 
     </parameters> 
    </defaultConnectionFactory> 
    </entityFramework> 
</configuration> 

E ispezionando l'oggetto db vedo che la mia stringa di connessione è

Data Source=(localdb)\\v11.0;Initial Catalog=ImageSignature.ImageContext;Integrated Security=True;MultipleActiveResultSets=True;Application Name=EntityFrameworkMUE 

Ma tutto questo assomiglia jibberish a me. Vengo da uno sfondo MySQL.

Dove si trova esattamente il mio database e come posso visualizzarlo? Non vedo nulla di rilevante in "Server Explorer" in VS2012.

risposta

8

This articolo dovrebbe rispondere alla tua domanda.

La sezione di configurazione consente di specificare una connessione predefinita fabbrica che codice Prima deve utilizzare per individuare un database da utilizzare per un contesto . Il factory di connessione predefinito viene utilizzato solo quando nessuna stringa di connessione è stata aggiunta al file di configurazione per un contesto .

quando è stato installato il pacchetto di EF NuGet una fabbrica di connessione predefinita è stato registrato che punta a uno SQL Express o LocalDB, a seconda sul quale è stato installato.

A giudicare dalla configurazione, sembra che si stia utilizzando una connessione a LocalDb, which is a minimalist version of SQL used for development.

È possibile provare a utilizzare il Server Explorer integrato in Visual Studio per accedere a quel database, ma, come è stato scritto, potrebbe non essere visibile "out of the box". Pertanto, potrebbe essere necessario creare una nuova connessione in Esplora server per visualizzare i contenuti.

EDIT:

Ho dovuto accendere un VMware Windows 8 con VS2012 per rispondere realmente alla domanda "dove sul disco è il database".

Il LocalDb crea mdf e ldf i file in C:\Users\<USER NAME>\AppData\Local\Microsoft\Microsoft SQL Server Local DB\Instances\v11.0

Screenshot from my VM

Per quanto riguarda il collegamento ad esso tramite il browser di server, sono stato in grado di visualizzare il database immettendo (LocalDb)\v11.0 come indirizzo del server e quindi selezionando la database con un nome come il nome del contesto dati dell'applicazione (con spazio dei nomi).

Tutte queste informazioni ho trovato here.

Si noti che nel codice pubblicato here sembra che si stia ricostruendo il database all'inizio dell'applicazione utilizzando Database.SetInitializer(new DropCreateDatabaseAlways<ImageContext>());. Ovviamente questo è utile quando si esegue l'app per la prima volta (quindi il database viene effettivamente creato), ma le repliche successive cancelleranno i dati e inizieranno con una nuova lista.Dopo essermi connesso al database utilizzando il Server Explorer, non ero in grado di eseguire questo codice poiché "il database era già in uso". Probabilmente dovrai riconsiderare il mantenimento della connessione aperta nel browser del server o modificare quella linea di codice.

+0

Perché non è "visibile fuori dagli schemi"? Dov'è? È * memorizzato in un file sul mio computer, giusto? È stato gettato nella cartella Temp forse? Proverò ad aggiungere 'AttachDBFilename' alla mia stringa di connessione come suggerisce Darin, ma mi piacerebbe davvero sapere cosa sta facendo. – mpen

+0

Poiché utilizzo Windows 7 e server SQL completi per lo sviluppo e LocalDd sembra essere installato con VS2012 su W8, sto riscontrando problemi di controllo. Ti dispiacerebbe condividere come hai * creato un DbContext * molto semplice? – Shaamaan

+0

Ho caricato il relativo a [questo gist] (https://gist.github.com/mnbayazit/89409c1fb880f3704396). È solo una classe con 2 campi. – mpen

3

Si sta utilizzando LocalDb. Il contenuto potrebbe essere memorizzato in un file. Si potrebbe specificare la posizione utilizzando una stringa di connessione:

<connectionStrings> 
    <add name="ImageContext" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=database;Integrated Security=SSPI;AttachDBFilename=c:\work\database.mdf" providerName="System.Data.SqlClient" /> 
</connectionStrings> 

La name della stringa di connessione deve corrispondere al nome del file DbContext.

È possibile utilizzare Server Explorer in Visual Studio per aprire questo file db ed esplorarne il contenuto.

+1

LocalDB è un database basato su servizi e non ha nulla a che fare con SQL Server Compact – ErikEJ

+0

Grazie. Ho provato ad aggiungere questo; ha creato il file DB a cui ero in grado di connettersi scegliendo "File di database Microsoft SQL Server" in Esplora server. Posso vedere la tabella ora, ma non riesco a vederne il contenuto. – mpen

+0

Molto probabilmente perché il database è vuoto? – Shaamaan