2013-04-23 11 views
6

Po ukończeniu ASP.NET MVC 3 (znajdź here), starałem się opublikować aplikację online. Skontaktowałem się z firmą hostingową, aby się upewnić, czy można hostować aplikacje MVC 3. Ale musiałem bin wdrożyć aplikację (dll). Więc po wykonaniu pewnych czynności na hanselmans blog, jestem utknięcie na następujący błąd:Nie można znaleźć żądanego dostawcy danych .Net Framework. Nie można go zainstalować

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

Każda pomoc jest mile widziana.

+0

Czy korzystasz z Entity Framework? – mattytommo

+0

Tak, dokładnie o tym wspomniano w samouczku. – SamekaTV

+1

Czy dodano kopię Local = True do odwołania do Entity Framework? – mattytommo

Odpowiedz

11

Z mojego doświadczenia wynika, że ​​błąd oznacza, że ​​wartość atrybutu providerName na ciąg połączenia w Twojej web.config jest albo błędne, albo dostawca dosłownie nie jest zainstalowany. Jeśli Twój providerName jest ustawiony na System.Data.SqlServerCe.4.0 (SQL Server Compact), co nie jest rzadkością w programowaniu, mogę zagwarantować, że nie jest on zainstalowany na twoim hoście internetowym; jest używany tylko w Visual Studio do programowania. Prawdopodobnie wystarczy zmienić go na prawdziwego dostawcę serwera SQL: System.Data.SqlClient.

+1

Zweryfikuj ciąg połączenia, aby upewnić się, że nazwa serwera i informacje o uwierzytelnieniu są poprawne. –

2

Rozwiązałem problem.

Znajduję miejsce w providerName. Tak więc, struktura .net nie jest w stanie ustalić łańcucha połączenia z bazą danych.

Sprawdź wartość atrybutu tagu connectionString. Twój providerName może nie być dobrze zdefiniowany. nie zezwalaj na spacje i chaknij dodatkowych znaków w parametrze providerName.

0

Stawiłem czoła podobnemu problemowi .. i jest na to bardzo zabawne rozwiązanie. Po prostu zajrzyj do swojego ConnectionString - jeśli jest taki sam, jak w innych aplikacjach ASP.Net, to nie powinno. .. Entity Framework ma innej sprawie zupełnie

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

go zmienić -

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

można zidentyfikować różnicę .. tylko jedno małe - nie ma ';' na końcu ProviderName .. Tak i to robi różnicę. Powinna być taka sama dla tej samej kopii ProviderName, chociaż nie sprawdzałem wielkości liter. Ale to rozwiązać mój problem

0

Kolejnym punktem dane ...

pracuję z Oracle i Entity Framework. Zainstalowałem Oracle ODP.NET, zarządzany sterownik, aby rozwiązać ten problem. W Nuget Package Manager wprowadzić

Install-Package Oracle.ManagedDataAccess 

To zaktualizuje app.config z odpowiednimi informacjami montażowej i DbProviderFactories. Używam VS 2015, Entity Framework 6. Mam również zainstalowane narzędzia Oracle Developer Tools.

+0

Witam @Jeff. Obecnie mam do czynienia z tym samym problemem podczas wdrażania witryny w IIS 8.5. Czy możesz sprawdzić to http://stackoverflow.com/q/42090440/1839005. Doceń swoje cenne sugestie. – bkr

0

Błąd był doskonały, a komentarze powyżej były dobre, ale w moim przypadku dosłownie orkisz dostawcy złego w pliku web.config: System.Data.SqlClinet nie System.Data.SqlClient

Powiązane problemy