2012-12-04 21 views
5

Ok, quindi ho un sito Web che utilizza ASP.net mvc, il problema che sto avendo è con Entity Framework. Ho aggiunto tutti i riferimenti e l'ho fatto girare sul mio computer locale, ma quando lo pubblico ho ricevuto il seguente errore.Entity Framework funziona su server locale ma non remoto

System.InvalidOperationException: il tipo di provider di Entity Framework 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer, Version = 6.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089' per la 'System.Data.SqlClient 'Impossibile caricare il provider ADO.NET. Assicurarsi che l'assembly del provider sia disponibile per l'applicazione in esecuzione. Vedere http://go.microsoft.com/fwlink/?LinkId=260882 per ulteriori informazioni.

Ho ricontrollato i miei riferimenti e ho aggiunto EntityFramework.SqlServer e System.Data nel mio progetto. La stringa di connessione che uso per connettermi al database e dichiarare il servizio fornito è di seguito.

<connectionStrings> 
<add name="[dataConnection]" connectionString="Data Source=[ip of host machine];Database=[name];UID=[user];pwd=*******;MultipleActiveResultSets=True;" providerName="System.Data.SqlClient" /> 
    </connectionStrings> 

Nome non ci resta che il nome della base di dati, questo viene utilizzato anche nel mio web.debug.config

<connectionStrings> 
<add name="[dataconnection]" 
    connectionString="Data Source=.;Database=[name];UID=[user];pwd=*******;MultipleActiveResultSets=True;" 
    xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/> 
    </connectionStrings> 

Sono abbastanza nuovo a questo intera cosa ed è stato appena consegnato qualcun'altro codice quindi sto cercando di imparare sul flusso. Questo è il mio primo incontro con questo quindi ogni direzione sarebbe apprezzata.

risposta

7

Ho avuto lo stesso problema nel mio assembly di test di integrazione (sto utilizzando il framework di test di MS Visual Studio Unit per questo) e l'ho risolto aggiungendo gli assembly EF agli elementi di distribuzione nel file .testsettings.

  1. Ho installato EF 6 alfa utilizzando Package Manager Console utilizzando: install-pacchetto EntityFramework -Pre

Ecco il mio app.config

<?xml version="1.0" encoding="utf-8"?> 
    <configuration> 
     <configSections> 
     <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
     </configSections> 
     <entityFramework> 
     <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> 
     </entityFramework> 
    </configuration> 

mia stringa di connessione (i impostazione del codice): server=.\SIN;initial catalog=IntegrationTests;User ID=user;Password=pass;MultipleActiveResultSets=true;

  1. Ho esaminato le proprietà di riferimento dell'assieme EF per vedere se sono impostate su "Copia locale" = True. Infine ho controllato la cartella TestResults /../ Out e ho scoperto che non esiste alcun assembly EntityFramework.SqlServer (la classe SqlProviderServices si trova in esso).

  2. così ho appena aggiunto sia EF 6 assemblee per i miei oggetti di implementazione e ora è tutto ok deployment items

Si può provare a copiare EntityFramework.SqlServer assembly nella directory del server Web per verificare se Funziona.

Forse this link può essere utile

P.S:

Assicurarsi che non si dispone di un riferimento a System.Data.Entity, perché sarete utilizzando uno dal GAC. EF 6 Alpha assembly non è installato in GAC quando li si installa con Nuget. Il framework di destinazione dovrebbe essere .NET 4.5.

Ci scusiamo per il mio pessimo inglese.

+0

Questo ha funzionato per me, penso che il file EntityFrameworkSqlServer.dll fosse mancante quando ho provato a pubblicare il mio sito. – Ken

0

Una domanda: quale versione EF?

Controlla il tuo pool IIS versione .NET ... Dovrebbe essere quello che punta alla versione .NET del progetto pubblicato ... L'assembly di EF dovrebbe essere nella cartella .NET framework nella directory di Windows (AKA GAC)

+0

La versione che sto usando in questo momento è 6.0.0.0. Questo è per entrambi EntityFramework e EntityFramework.SqlServer – Ken

+0

Non c'è EF 6.0 - per quanto ne so ... V'è, tuttavia, IIS 6. Guardate il pool di IIS che gestisce il progetto. L'impostazione predefinita di IIS 6 è l'esecuzione di .NET 2.0 e questo è probabilmente il motivo per cui la versione dell'assembly EF non viene riconosciuta. – lionheart

+0

La versione di .net Framework in esecuzione è la versione 4.0. Il framework EF è in realtà 6.0 alpha-1. È uscito con Visual Studio 2012 da quello che ho capito. Se mi sbaglio in questa informazione fammi sapere, è proprio quello che sono stato in grado di trovare. Anche se tutto ciò che ho detto è vero, ci sarebbe qualche conflitto tra .net 4.0 e IIS7? (IIS7 è ciò che il server è in esecuzione). Anche la pagina stessa è in grado di funzionare, mostra solo quell'errore quando tento di usare il DB. Significato quando provo ad accedere – Ken

Problemi correlati