2013-03-04 19 views
7

Sto tentando di configurare una semplice applicazione Web ASP.NET MVC 4 utilizzando le prime migrazioni di DB da un server SQL (2005). Ho creato le tabelle nel database e ho utilizzato Entity Framework per creare gli oggetti nel codice. Posso accedere ai dati usando questi oggetti.Impossibile trovare il provider di dati .Net Framework richiesto. (SqlClient)

I problemi si presentano quando provo a inizializzare la WebSecurity usando WebSecurity.InitializeDatabaseConnection("FLMREntities", "UserProfile", "UserId", "UserName", true); nel file Global.asax.cs. Ho provato a utilizzare il filtro InitializeSimpleMembershipAttribute fornito con il modello e ho riscontrato lo stesso problema. Ricevo il seguente messaggio di errore:

Unable to find the requested .Net Framework Data Provider. It may not be installed. 

Ecco la stringa di connessione in questione:

<add name="FLMREntities" 
    connectionString="metadata=res://*/Models.FLMR.csdl|res://*/Models.FLMR.ssdl|res://*/Models.FLMR.msl; 
        provider=System.Data.SqlClient; 
        provider connection string=&quot;data source=notes.marietta.edu; 
         initial catalog=muskwater; 
         user id=muskwater;password=********; 
         MultipleActiveResultSets=True; 
         App=EntityFramework&quot;" 
    providerName="System.Data.EntityClient" /> 

Inoltre, ho creato le tabelle di appartenenza del database per soddisfare ciò che crea il modello. Se cambio il parametro finale nella chiamata Initialize a false (in modo che non provi a creare automaticamente le tabelle), restituisce che non riesce a trovare la tabella UserProfile. Ho anche provato variazioni sui nomi, come [dbo]. [UserProfile].

Tutto ciò di cui ho bisogno è avere un modello di account semplice per consentire agli utenti di accedere e consentire a determinati utenti di vedere più contenuti.

+0

Hai un '' prima della stringa di connessione (s)? Per evitare di ereditare da altre configurazioni – Basic

+0

non ho altre stringhe di connessione in questo progetto. Ho commentato quello dal modello. Avrei ancora bisogno del '' e andrei sullo stesso livello annidato di quello sopra? – amoscardino

+0

È possibile che per la configurazione della macchina/del sito sia possibile aggiungere stringhe di connessione all'applicazione. Anche alcuni framework. Il '' dovrebbe essere il primo elemento nella stessa sezione della stringa di connessione (l'ordine viene conservato quando vengono caricate le sezioni di configurazione). – Basic

risposta

1

Questo potrebbe essere un duplicato di this.

Da quello che ricordo di questo problema, è necessario assicurarsi che il provider sqldata sia registrato. A volte, nella tua macchina.config c'è una voce duplicata che devi eliminare e, se ricordo male, potrebbe esserci una voce errata che devi rimuovere. Date un'occhiata a this msdn post, le informazioni per questo sono a circa metà pagina.

Il collegamento all'altro SO ha alcuni collegamenti che potrebbero essere utili. Se questo finisce per non essere contrassegnato come una domanda duplicata, posso aggiungerli anche qui o qualunque sia la cosa giusta da fare.

La sezione che stai cercando sarà simile a questo che penso:

<system.data> 
    <DbProviderFactories> 
    <add name="SqlClient Data Provider" 
    invariant="System.Data.SqlClient" 
    description=".Net Framework Data Provider for SqlServer" 
    type="System.Data.SqlClient.SqlClientFactory, System.Data, 
    Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
    /> 
    </DbProviderFactories> 
</system.data> 

Dal informazioni fornite nei commenti, sembra che questo non è presente nel vostro machine.config. A meno che non mi sbagli (possibile) ciò significa che il provider SQL non è registrato sul tuo computer. Dovrai aggiungere la sezione precedente al tuo web.config. Dovrai anche assicurarti che System.Data.SqlClient sia referenziato nel tuo progetto.

Se questo non è installato sul computer di destinazione, avrete più lavoro da fare, installandolo. Vorrei poterti aiutare di più, ma quando ho fatto questo, era per SqlServerCE, quindi i file che ho usato sono molto diversi.

Buona fortuna!

MODIFICA: Un'informazione critica, è che la versione deve corrispondere al file che si sta utilizzando. in type = "blabh..blah..blah..Version = 2.0.0.0, blah blah" che deve essere la versione del file che si sta utilizzando, quindi fare clic con il pulsante destro del mouse sul file e ottenere la versione del file. Se fallisce, prova le varianti della versione. Credo che il mio file fosse 2.0.0.1 ma Version = 2.0 è ciò che ha funzionato quando l'ho fatto. Prova solo alcune versioni diverse in base al tuo numero di versione (2.0, 2.0.0, 2.0.0.1 per esempio).

+0

La risposta in questa domanda in realtà non spiega come risolvere il problema. Ho localizzato il file machine.config e ci sono solo voci DbProviderFactory per SqlServerCe. Devo aggiungere una voce per SqlClient? Sembrerà proprio quello che hai postato? – amoscardino

+0

Non vorrei modificare machine.config a meno che tu non sappia cosa stai facendo. Fammi vedere se riesco a trovare le risorse che ho usato quando ho avuto questo problema in modo da avere un'idea migliore. –

+0

Inoltre, FYI, quando ho avuto lo stesso errore di te (era al runtime), questa era la soluzione. Dovevo assicurarmi di distribuire i file corretti e ho dovuto aggiungere la sezione che ho elencato al mio web.config. –

0

Volevo solo inserire qui, che ho avuto questo problema, guardando il mio machine.config per la versione .NET di destinazione che stavo correndo da ...all'interno della struttura:

garantire che i fornitori di dati mirati siano correttamente immessi all'interno di lì, solo uno per fornitore (ho visto i duplicati causano problemi), così come, assicurarsi che sia XML valido, e hai solo una voce DBProviderFactories. Nel mio caso, ho avuto una voce dopo la voce iniziale (essenzialmente due voci, una con i miei fornitori, una vuota) e il vuoto stava causando tutti i problemi.

Spero che questo aiuta qualcuno con lo stesso problema :)

4

Ho avuto un problema simile, quello che ho fatto: ho modificato la connessione predefinita. Ho già avuto una stringa di connessione per il modello edmx, che si presentava così:

<add name="ChemicalReporterEntities" connectionString="metadata=res://*/ChemicalDB.csdl|res://*/ChemicalDB.ssdl|res://*/ChemicalDB.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.\SQLExpress;initial catalog=ChemicalReporter;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 

Ma non posso usato con il provider SimpleMemebrship. Quindi, in Visual Studio ho aperto Esplora server> Connessioni dati, ho selezionato la mia connessione, fare clic destro, proprietà e ho copiato la stringa di connessione da lì e incollato alla defaultConnection:

<add name="DefaultConnection" connectionString="Data Source=.\SQLExpress;Initial Catalog=ChemicalReporter;Integrated Security=True;MultipleActiveResultSets=True;Application Name=EntityFramework" providerName="System.Data.SqlClient" /> 

Dopo che ho cambiato WebSecurity.InitializeDatabaseConnection usare DefaultConnection.

WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", true); 
Problemi correlati