2013-04-23 15 views
6

Nach Abschluss der ASP.NET MVC 3 (Suche here), habe ich versucht, die App online zu veröffentlichen. Ich kontaktierte die Hosting-Firma, um sicher zu sein, ob es möglich ist, MVC 3-Apps zu hosten. Aber ich musste die Anwendung (DLL-Dateien) bereitstellen. So, nachdem einige Schritte auf hanselmans blog folgenden, ich bin immer auf folgende Fehler fest:Der angeforderte .Net Framework Data Provider konnte nicht gefunden werden. Es wird möglicherweise nicht installiert

Unable to find the requested .Net Framework Data Provider. It may not be installed. Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.ArgumentException: Unable to find the requested .Net Framework Data Provider. It may not be installed.

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:

[ArgumentException: Unable to find the requested .Net Framework Data Provider. It may not be installed.]
System.Data.Common.DbProviderFactories.GetFactory(String providerInvariantName) +1420503
System.Data.Entity.Internal.LazyInternalConnection.TryInitializeFromAppConfig(String name) +362
System.Data.Entity.Internal.LazyInternalConnection.Initialize() +49
System.Data.Entity.Internal.LazyInternalConnection.get_ConnectionHasModel() +10 System.Data.Entity.Internal.LazyInternalContext.InitializeContext() +265 System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) +17
System.Data.Entity.Internal.Linq.InternalSet 1.Initialize() +62
System.Data.Entity.Internal.Linq.InternalSet
1.get_InternalContext() +15 System.Data.Entity.Infrastructure.DbQuery 1.System.Linq.IQueryable.get_Provider() +37 System.Linq.Queryable.OrderByDescending(IQueryable 1 source, Expression 1 keySelector) +66
MvcMusicStore.Controllers.HomeController.GetTopSellingAlbums(Int32 count) +420 MvcMusicStore.Controllers.HomeController.Index() +47
lambda_method(Closure , ControllerBase , Object[]) +40
System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +17
System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary
2 parameters) +188
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +27

Jede Hilfe sehr geschätzt wird.

+0

Verwenden Sie Entity Framework? – mattytommo

+0

Ja, genau das wird im Tutorial erwähnt. – SamekaTV

+1

Haben Sie der Entity Framework-Referenz "Copy Local = True" hinzugefügt? – mattytommo

Antwort

11

Aus meiner Erfahrung bedeutet, dass Fehler, dass der Wert des providerName Attribut auf der Verbindungszeichenfolge in der web.config entweder falsch ist, oder der Provider buchstäblich nicht installiert ist. Wenn Ihr providerName auf System.Data.SqlServerCe.4.0 (SQL Server Compact) festgelegt ist, was in der Entwicklung nicht ungewöhnlich ist, kann ich Ihnen garantieren, dass es nicht auf Ihrem Webhost installiert ist; Es wird nur in Visual Studio zur Entwicklung verwendet. Sie müssen es wahrscheinlich nur in einen echten SQL Server-Provider ändern: System.Data.SqlClient.

+1

Überprüfen Sie die Verbindungszeichenfolge, um sicherzustellen, dass der Servername und die Authentifizierungsinformationen korrekt sind. –

2

Ich löste das Problem.

Ich finde ein Leerzeichen in ProviderName. Daher kann das .net-Framework keine Verbindungszeichenfolge mit der Datenbank herstellen.

Überprüfen Sie den Attributwert connectionString-Tag. Ihr ProviderName ist möglicherweise nicht gut definiert. erlauben Sie keinen Platz und chack zusätzliche Zeichen in ProviderName Wert.

0

Ich konfrontiert die ähnliche Problem .. und es gibt sehr lustige Lösung für das .. Schauen Sie einfach in Ihrem ConnectionString - Wenn es das gleiche ist, dass Sie für Ihre anderen ASP.Net-Apps verwendet haben, dann sollte es nicht sein. .. Entity Framework hat einen anderen Fall insgesamt

<add name="EmployeeContext" connectionString="Server=.\SQLEXPRESS;Database=DB1;User Id=user1;password=password1;" providerName="System.Data.SqlClient**;**" /> 

ändern sie -

<add name="EmployeeContext" connectionString="Server=.\SQLEXPRESS;Database=DB1;User Id=user1;password=password1;" providerName="System.Data.SqlClient"/> 

können Sie den Unterschied erkennen .. nur eine kleine - es gibt kein ';' am Ende von ProviderName .. Ja und das macht den Unterschied .. es sollte die gleiche Kopie des ProviderName sein, obwohl ich die Groß-/Kleinschreibung nicht überprüft haben. Aber das löste mein Problem

0

Ein weiterer Datenpunkt ...

ich mit Oracle und dem Entity Framework arbeiten. Ich habe den Oracle ODP.NET, Managed Driver installiert, um dieses Problem zu lösen. Im NuGet Package Manager geben

Install-Package Oracle.ManagedDataAccess 

Es wird die App.config mit der entsprechenden Montageinformationen und die DbProviderFactories aktualisieren. Ich benutze VS 2015, Entity Framework 6. Ich habe auch die Oracle Developer Tools installiert.

+0

Hallo @ Jeff. Ich stehe derzeit beim Bereitstellen der Website in IIS 8.5 vor demselben Problem. Können Sie dies bitte überprüfen http://stackoverflow.com/q/42090440/1839005. Schätzen Sie Ihre wertvollen Vorschläge. – bkr

0

Der Fehler war perfekt, und die Kommentare oben waren gut, aber in meinem Fall habe ich geschrieben buchstäblich den Provider falsch in der Datei web.config: System.Data.SqlClinet nicht System.Data.SqlClient

Verwandte Themen