当我们尝试使用Azure Mysql DB运行MVC4项目时,我们收到以下错误。
在Web.Config文件中,我们有以下内容,
<DbProviderFactories>
<remove invariant="MySql.Data.MySqlClient" />
<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data" />
</DbProviderFactories>
错误:
无法找到或加载已注册的.Net Framework数据提供程序。
描述:执行期间发生了未处理的异常 当前的网络请求。请查看堆栈跟踪了解更多信息 有关错误的信息以及它在代码中的起源。
异常详细信息:System.Configuration.ConfigurationErrorsException: 无法找到或加载已注册的.Net Framework数据提供程序。
来源错误:
Line 96: if (objectQuery != null && !string.IsNullOrEmpty(path))
Line 97: {
Line 98: return objectQuery.Include(path);
Line 99: }
Line 100:
Source File: C:\Phase2\FreeLance\FreeLance\Framework\Data\FreeLance.Data.Framework\EntityFramework\Extensions.cs Line: 98
Stack Trace:
[ConfigurationErrorsException: Failed to find or load the registered .Net Framework Data Provider.]
System.Data.Common.DbProviderFactories.GetFactory(DataRow providerRow) +2238858
System.Data.EntityClient.EntityConnection.GetFactory(String providerString) +143
System.Data.EntityClient.EntityConnection.ChangeConnectionString(String newConnectionString) +641
System.Data.Entity.Internal.LazyInternalConnection.TryInitializeFromAppConfig(String name, AppConfig config) +144
System.Data.Entity.Internal.LazyInternalConnection.Initialize() +95
System.Data.Entity.Internal.LazyInternalConnection.CreateObjectContextFromConnectionModel() +16
System.Data.Entity.Internal.LazyInternalContext.InitializeContext() +269
System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) +26
System.Data.Entity.Internal.Linq.InternalSet`1.Initialize() +71
System.Data.Entity.Internal.Linq.InternalSet`1.Include(String path) +25
System.Data.Entity.Infrastructure.DbQuery`1.Include(String path) +111
FreeLance.Data.Framework.EntityFramework.Extensions.Include(IQueryable`1 source, String path) in C:\Phase2\FreeLance\FreeLance\Framework\Data\FreeLance.Data.Framework\EntityFramework\Extensions.cs:98
FreeLance.Data.Framework.EntityFramework.Extensions.Include(IQueryable`1 source, Expression`1 expression) in C:\Phase2\FreeLance\FreeLance\Framework\Data\FreeLance.Data.Framework\EntityFramework\Extensions.cs:64
FreeLance.Data.Framework.EntityFramework.Extensions.Include(IQueryable`1 source, Expression`1[] expressions) in C:\Phase2\FreeLance\FreeLance\Framework\Data\FreeLance.Data.Framework\EntityFramework\Extensions.cs:79
FreeLance.Data.Framework.EntityFramework.Repository`1.GetAll(Expression`1[] include) in C:\Phase2\FreeLance\FreeLance\Framework\Data\FreeLance.Data.Framework\EntityFramework\Repository.cs:89
FreeLance.Business.PageBC.GetPages() in C:\Phase2\FreeLance\FreeLance\Business\FreeLance.Business\Admin\PageBC.cs:49
FreeLance.Services.PageService.GetPages() in C:\Phase2\FreeLance\FreeLance\Services\FreeLance.Services\PageService.cs:54
FreeLance.Web.Helpers.DataHelper.GetAppPages() in C:\Phase2\FreeLance\FreeLance\User Interface\FreeLance.Web\Helpers\DataHelper.cs:250
FreeLance.Web.ResourceConfig.GetAppPages() in C:\Phase2\FreeLance\FreeLance\User Interface\FreeLance.Web\App_Start\ResourceConfig.cs:64
FreeLance.Web.AppConfig.Run() in C:\Phase2\FreeLance\FreeLance\User Interface\FreeLance.Web\App_Start\AppConfig.cs:55
FreeLance.Web.MvcApplication.Application_Start() in C:\Phase2\FreeLance\FreeLance\User Interface\FreeLance.Web\Global.asax.cs:40
[HttpException (0x80004005): Failed to find or load the registered .Net Framework Data Provider.]
System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app) +4054645
System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) +191
System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context) +352
System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context) +407
System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +375
[HttpException (0x80004005): Failed to find or load the registered .Net Framework Data Provider.]
System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +11646640
System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +141
System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +4869909
答案 0 :(得分:20)
确保添加了 MySql.Data.Entity.dll &amp; MVC项目bin中的 MySql.Data.dll 文件
答案 1 :(得分:4)
如果使用Mono,请确保在machine.config中也有MySQL Data Provider节点。我使用4.5,所以为我它 /opt/mono/4.5/machine.config (示例位置):
<system.data>
<DbProviderFactories>
<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.8.3.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
</DbProviderFactories>
</system.data>
您可以通过在Linux中运行simple命令找到machine.config位置:
cd / && find -name 'machine.config'
在Ubuntu上sudo
命令之前可能需要find
:
cd / && sudo find -name 'machine.config'