2014-01-24 126 views
8

编辑:堆栈跟踪添加在底部。如何让Glimpse与EF6一起使用?

我有一个ASP.NET MVC 5项目,通过实体框架6.使用SQL Server数据库

我加入掠影(和Glimpse.MVC5)的项目,并且工作正常。

但是,当我添加Glimpse.EF6时,我的应用程序一尝试访问数据库就会引发异常。唯一的例外是:

System.NotSupportedException

无法确定类型的供应商工厂的供应商名称 'System.Data.SqlClient.SqlClientFactory'。确保在应用程序配置中安装或注册了ADO.NET提供程序。

发生了什么事?仅供参考,我的web.config的connectionStrings部分看起来是这样的:

<connectionStrings> 
    <add name="DefaultConnection" connectionString="Data Source=.; Initial Catalog=foo; Integrated Security=True; MultipleActiveResultSets=True;" providerName="System.Data.SqlClient" /> 
</connectionStrings> 

...我Application_Start方法是这样的:

protected void Application_Start() 
{ 
    AreaRegistration.RegisterAllAreas(); 
    GlobalConfiguration.Configure(WebApiConfig.Register); 
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
    RouteConfig.RegisterRoutes(RouteTable.Routes); 
    BundleConfig.RegisterBundles(BundleTable.Bundles); 

    Database.SetInitializer(new WebApplication.Models.Storage.ApplicationDbInitializer()); 
} 

...和我的上下文类看起来是这样的:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser> 
{ 
    public ApplicationDbContext() 
     : base("DefaultConnection") 
    { 
    } 

    public DbSet<Foo> Foos { get; set; } 
} 

在此先感谢您的帮助......


堆栈跟踪:

[NotSupportedException: Unable to determine the provider name for provider factory of type 'System.Data.SqlClient.SqlClientFactory'. Make sure that the ADO.NET provider is installed or registered in the application config.] 
System.Data.Entity.Utilities.DbProviderFactoryExtensions.GetProviderInvariantName(DbProviderFactory factory) +290 
System.Data.Entity.Infrastructure.DependencyResolution.DefaultInvariantNameResolver.GetService(Type type, Object key) +248 
System.Data.Entity.Infrastructure.DependencyResolution.<>c__DisplayClass1.<GetService>b__0(Tuple`2 k) +75 
System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory) +72 
System.Data.Entity.Infrastructure.DependencyResolution.CachingDependencyResolver.GetService(Type type, Object key) +210 
System.Data.Entity.Infrastructure.DependencyResolution.<>c__DisplayClass3.<GetService>b__0(IDbDependencyResolver r) +60 
System.Linq.WhereSelectArrayIterator`2.MoveNext() +66 
System.Linq.Enumerable.FirstOrDefault(IEnumerable`1 source, Func`2 predicate) +161 
System.Data.Entity.Infrastructure.DependencyResolution.ResolverChain.GetService(Type type, Object key) +250 
System.Data.Entity.Infrastructure.DependencyResolution.RootDependencyResolver.GetService(Type type, Object key) +106 
System.Data.Entity.Infrastructure.DependencyResolution.<>c__DisplayClass3.<GetService>b__0(IDbDependencyResolver r) +60 
System.Linq.WhereSelectArrayIterator`2.MoveNext() +66 
System.Linq.Enumerable.FirstOrDefault(IEnumerable`1 source, Func`2 predicate) +94 
System.Data.Entity.Infrastructure.DependencyResolution.ResolverChain.GetService(Type type, Object key) +250 
System.Data.Entity.Infrastructure.DependencyResolution.CompositeResolver`2.GetService(Type type, Object key) +102 
System.Data.Entity.Infrastructure.DependencyResolution.DbDependencyResolverExtensions.GetService(IDbDependencyResolver resolver, Object key) +145 
System.Data.Entity.Core.Common.<>c__DisplayClass5.<GetExecutionStrategy>b__4(ExecutionStrategyKey k) +84 
System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory) +72 
System.Data.Entity.Core.Common.DbProviderServices.GetExecutionStrategy(DbConnection connection, DbProviderFactory providerFactory) +351 
System.Data.Entity.Core.Common.DbProviderServices.GetExecutionStrategy(DbConnection connection) +62 
System.Data.Entity.SqlServer.SqlProviderServices.UsingConnection(DbConnection sqlConnection, Action`1 act) +319 
System.Data.Entity.SqlServer.SqlProviderServices.UsingMasterConnection(DbConnection sqlConnection, Action`1 act) +335 
System.Data.Entity.SqlServer.SqlProviderServices.GetDbProviderManifestToken(DbConnection connection) +399 
System.Data.Entity.Core.Common.DbProviderServices.GetProviderManifestToken(DbConnection connection) +132 

[ProviderIncompatibleException: The provider did not return a ProviderManifestToken string.] 
System.Data.Entity.Core.Common.DbProviderServices.GetProviderManifestToken(DbConnection connection) +327 
Glimpse.EF.AlternateType.GlimpseDbProviderServices.GetDbProviderManifestToken(DbConnection connection) +113 
System.Data.Entity.Core.Common.DbProviderServices.GetProviderManifestToken(DbConnection connection) +255 
System.Data.Entity.Utilities.DbProviderServicesExtensions.GetProviderManifestTokenChecked(DbProviderServices providerServices, DbConnection connection) +67 

[ProviderIncompatibleException: An error occurred accessing the database. This usually means that the connection to the database failed. Check that the connection string is correct and that the appropriate DbContext constructor is being used to specify it or find it in the application's config file. See http://go.microsoft.com/fwlink/?LinkId=386386 for information on DbContext and connections. See the inner exception for details of the failure.] 
System.Data.Entity.Utilities.DbProviderServicesExtensions.GetProviderManifestTokenChecked(DbProviderServices providerServices, DbConnection connection) +277 
System.Data.Entity.Infrastructure.<>c__DisplayClass1.<ResolveManifestToken>b__0(Tuple`3 k) +63 
System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory) +72 
System.Data.Entity.Infrastructure.DefaultManifestTokenResolver.ResolveManifestToken(DbConnection connection) +360 
System.Data.Entity.Utilities.DbConnectionExtensions.GetProviderInfo(DbConnection connection, DbProviderManifest& providerManifest) +89 
System.Data.Entity.DbModelBuilder.Build(DbConnection providerConnection) +79 
System.Data.Entity.Internal.LazyInternalContext.CreateModel(LazyInternalContext internalContext) +143 
System.Data.Entity.Internal.RetryLazy`2.GetValue(TInput input) +171 
System.Data.Entity.Internal.LazyInternalContext.InitializeContext() +594 
System.Data.Entity.Internal.InternalContext.Initialize() +31 
System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) +39 
System.Data.Entity.Internal.Linq.InternalSet`1.Initialize() +138 
System.Data.Entity.Internal.Linq.InternalSet`1.Include(String path) +41 
System.Data.Entity.Infrastructure.DbQuery`1.Include(String path) +142 
System.Data.Entity.QueryableExtensions.Include(IQueryable`1 source, String path) +205 
System.Data.Entity.QueryableExtensions.Include(IQueryable`1 source, Expression`1 path) +305 
Microsoft.AspNet.Identity.EntityFramework.UserStore`6.GetUserAggregateAsync(Expression`1 filter) +610 
Microsoft.AspNet.Identity.EntityFramework.UserStore`6.FindByNameAsync(String userName) +1070 
Microsoft.AspNet.Identity.<FindByNameAsync>d__10.MoveNext() +283 
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +93 
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +52 
System.Runtime.CompilerServices.ConfiguredTaskAwaiter.GetResult() +24 
Microsoft.AspNet.Identity.<FindAsync>d__18.MoveNext() +673 
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +93 
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +52 
System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() +24 
WebApplication.Controllers.<Login>d__2.MoveNext() in c:\Users\Gary\Documents\Visual Studio 2013\Projects\eByGum\WebApplication\Controllers\AccountController.cs:49 
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +93 
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +52 
System.Runtime.CompilerServices.TaskAwaiter.GetResult() +21 
System.Threading.Tasks.TaskHelpersExtensions.ThrowIfFaulted(Task task) +61 
System.Web.Mvc.Async.TaskAsyncActionDescriptor.EndExecute(IAsyncResult asyncResult) +114 
System.Web.Mvc.Async.<>c__DisplayClass37.<BeginInvokeAsynchronousActionMethod>b__36(IAsyncResult asyncResult) +66 
System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +47 
System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +136 
System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +102 
System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) +49 
Castle.Proxies.AsyncControllerActionInvokerProxy.EndInvokeActionMethod_callback(IAsyncResult asyncResult) +42 
Castle.Proxies.Invocations.AsyncControllerActionInvoker_EndInvokeActionMethod.InvokeMethodOnTarget() +103 
Castle.DynamicProxy.AbstractInvocation.Proceed() +117 
Glimpse.Core.Extensibility.CastleInvocationToAlternateMethodContextAdapter.Proceed() +48 
Glimpse.Mvc.AlternateType.EndInvokeActionMethod.NewImplementation(IAlternateMethodContext context) +152 
Glimpse.Core.Extensibility.AlternateTypeToCastleInterceptorAdapter.Intercept(IInvocation invocation) +183 
Castle.DynamicProxy.AbstractInvocation.Proceed() +483 
Castle.Proxies.AsyncControllerActionInvokerProxy.EndInvokeActionMethod(IAsyncResult asyncResult) +203 
System.Web.Mvc.Async.AsyncInvocationWithFilters.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f() +117 
System.Web.Mvc.Async.<>c__DisplayClass48.<InvokeActionMethodFilterAsynchronouslyRecursive>b__41() +323 
System.Web.Mvc.Async.<>c__DisplayClass33.<BeginInvokeActionMethodWithFilters>b__32(IAsyncResult asyncResult) +44 
System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +47 
System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +136 
System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +102 
System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) +50 
System.Web.Mvc.Async.<>c__DisplayClass2b.<BeginInvokeAction>b__1c() +72 
System.Web.Mvc.Async.<>c__DisplayClass21.<BeginInvokeAction>b__1e(IAsyncResult asyncResult) +184 
System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +42 
System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +133 
System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +56 
System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +40 
System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState) +34 
System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +70 
System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +139 
System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +59 
System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +40 
System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +44 
System.Web.Mvc.Controller.<BeginExecute>b__15(IAsyncResult asyncResult, Controller controller) +39 
System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +62 
System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +139 
System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +59 
System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +40 
System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +39 
System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +39 
System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__5(IAsyncResult asyncResult, ProcessRequestState innerState) +39 
System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +70 
System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +139 
System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +59 
System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +40 
System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +40 
System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +38 
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +9514812 
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155 
+0

您可以添加堆栈跟踪吗?或者甚至更好,在[我们的问题跟踪器](https://github.com/glimpse/glimpse/issues)上创建问题,因为这听起来不像你做错了什么。就像快速检查一样,当您将Database.SetInitializer置于注释中时,是否也有相同的问题? – cgijbels

+0

@cgijbels:删除Database.SetInitializer没有区别。我将添加堆栈跟踪并创建一个问题。 –

+0

@cgijbels:添加为[issue 173](https://github.com/Glimpse/Glimpse/issues/713)。谢谢。 –

回答

7

对于那些寻找一个解决办法:

它看起来就像是一个bug within EF itself(它被提及为173以上,但链接是正确的)。您可以等待EF 6.1.1/6.2,或者您可以降级到EF 6.0.2,并且它将重新开始工作。

在Package Manager控制台,输入:

Install-Package EntityFramework -Version 6.0.2 

,你应该是好去。

但只有当EF 6.0.2是您的选择。祝你好运。

+1

回滚到6.0.2无助于那些使用Identity 2.0的人 – ScottE

+0

正确 - 感谢您指出@ScottE。希望EF的下一个版本能够快速出来并解决此问题。 – PRB

+0

我已经回滚到6.0.2,仍然有一个问题.. 有没有人得到它排序? –

0

尝试添加以下到您的配置文件

<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" /> 
    <providers> 
     <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 
    </providers> 
    </entityFramework> 
</configuration> 
+0

我已经有了类似的东西(我没有显示整个web.config文件 - 只有'connectionStrings'元素),但有趣的是我的'defaultConnectionFactory'被设置为本地数据库提供者。无论如何,我改变它与你的建议相同,不幸的是它没有什么区别 - 我仍然得到同样的错误。 –

+0

另外,我应该补充,当我删除Glimpse.EF6时,我所有的数据库访问都可以正常工作。这似乎是当我添加Glimpse.EF6时,它一切都出错了。 –

+1

哇,安装Glimpse.EF6似乎已经永久隐藏了我的项目,即使完全卸载Glimpse后,我也无法摆脱此错误。我被迫从备份恢复整个项目! –

相关问题