ASP.Net OpenAuth登录方法未找到System.Data.Entity.ModelConfiguration.EntityTypeConfiguration
我试图启用登录使用外部提供商,特别是Facebook的网络表格应用程序。ASP.Net OpenAuth登录方法未找到System.Data.Entity.ModelConfiguration.EntityTypeConfiguration
我使用asp.net 4.5 C#和Entity Framework 6
本地帐户登录完美地工作,但是当我尝试使用Facebook帐户登录,我得到两个以下错误:
1 - 我第一次运行时尝试登录:
未找到方法:'System.Data.Objects.ObjectContext System.Data.Entity.Infrastructure.IObjectContextAdapter.get_ObjectContext()'。 [堆栈跟踪]
[MissingMethodException: Method not found: 'System.Data.Objects.ObjectContext System.Data.Entity.Infrastructure.IObjectContextAdapter.get_ObjectContext()'.]
Microsoft.AspNet.Membership.OpenAuth.EFOpenAuthMembershipDatabase.EnsureDatabaseCreated(DbContext db) +0
Microsoft.AspNet.Membership.OpenAuth.EFOpenAuthMembershipDatabase.GetContext() +106
Microsoft.AspNet.Membership.OpenAuth.EFOpenAuthMembershipDatabase.GetMembershipUserName(String providerName, String providerUserId, Boolean updateLastUsed) +207
Microsoft.AspNet.Membership.OpenAuth.OpenAuthManager.Login(HttpContextBase context, String providerName, String providerUserId, Boolean createPersistentCookie) +285
Microsoft.AspNet.Membership.OpenAuth.OpenAuth.Login(String providerName, String providerUserId, Boolean createPersistentCookie) +109
然后 2 - 每次我尝试运行与Facebook登录一次:未发现
方法:“太虚System.Data.Entity.ModelConfiguration.EntityTypeConfiguration'1。 ToTable(System.String)” [栈跟踪]
[MissingMethodException: Method not found: 'Void System.Data.Entity.ModelConfiguration.EntityTypeConfiguration'1.ToTable(System.String)'.]
Microsoft.AspNet.Membership.OpenAuth.Data.OpenAuthDbContext.OnModelCreating(DbModelBuilder modelBuilder) +0
System.Data.Entity.DbContext.CallOnModelCreating(DbModelBuilder modelBuilder) +39
System.Data.Entity.Internal.LazyInternalContext.CreateModelBuilder() +674
System.Data.Entity.Internal.LazyInternalContext.CreateModel(LazyInternalContext internalContext) +61
System.Data.Entity.Internal.RetryLazy'2.GetValue(TInput input) +171
System.Data.Entity.Internal.LazyInternalContext.InitializeContext() +566
System.Data.Entity.Internal.InternalContext.Initialize() +31
System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) +39
System.Data.Entity.Internal.Linq.InternalSet'1.Initialize() +137
System.Data.Entity.Internal.Linq.InternalSet'1.get_InternalContext() +38
System.Data.Entity.Infrastructure.DbQuery'1.System.Linq.IQueryable.get_Provider() +99
System.Linq.Queryable.Where(IQueryable'1 source, Expression'1 predicate) +83
Microsoft.AspNet.Membership.OpenAuth.EFOpenAuthMembershipDatabase.GetMembershipUserName(String providerName, String providerUserId, Boolean updateLastUsed) +1486
Microsoft.AspNet.Membership.OpenAuth.OpenAuthManager.Login(HttpContextBase context, String providerName, String providerUserId, Boolean createPersistentCookie) +285
Microsoft.AspNet.Membership.OpenAuth.OpenAuth.Login(String providerName, String providerUserId, Boolean createPersistentCookie) +109
...]
这两个错误上升对以下行(OpenAuth.Login ()方法)在RegisterExternalLogin.aspx.cs:
if(OpenAuth.Login(authResult.Provider, authResult.ProviderUserId, createPersistentCookie: false))
{
RedirectToReturnUrl();
}
的authResult对象具有正确的值,所以Facebook验证工作正常。 OpenAuth.Login方法在尝试写入数据库时出错,但我无法理解,因为在调试错误时我没有收到任何明确的详细信息。即使使用脚本调试,我也会得到该方法的错误页面,而没有其他的东西。
我已经安装了以下软件包:
<package id="DotNetOpenAuth.AspNet" version="4.1.4.12333" targetFramework="net45" />
<package id="DotNetOpenAuth.Core" version="4.1.4.12333" targetFramework="net45" />
<package id="DotNetOpenAuth.OAuth.Consumer" version="4.1.4.12333" targetFramework="net45" />
<package id="DotNetOpenAuth.OAuth.Core" version="4.1.4.12333" targetFramework="net45" />
<package id="DotNetOpenAuth.OpenId.Core" version="4.1.4.12333" targetFramework="net45" />
<package id="DotNetOpenAuth.OpenId.RelyingParty" version="4.1.4.12333" targetFramework="net45" />
和OWIN如下:被提到OnModelCreating方法
<package id="Microsoft.Owin" version="3.0.1" targetFramework="net45" />
<package id="Microsoft.Owin.Host.SystemWeb" version="3.0.1" targetFramework="net45" />
<package id="Microsoft.Owin.Security" version="3.0.1" targetFramework="net45" />
<package id="Microsoft.Owin.Security.Cookies" version="3.0.1" targetFramework="net45" />
<package id="Microsoft.Owin.Security.Facebook" version="3.0.1" targetFramework="net45" />
<package id="Microsoft.Owin.Security.Google" version="3.0.1" targetFramework="net45" />
<package id="Microsoft.Owin.Security.MicrosoftAccount" version="3.0.1" targetFramework="net45" />
<package id="Microsoft.Owin.Security.OAuth" version="3.0.1" targetFramework="net45" />
<package id="Microsoft.Owin.Security.OpenIdConnect" version="3.0.1" targetFramework="net45" />
<package id="Microsoft.Owin.Security.Twitter" version="3.0.1" targetFramework="net45" />
如在第一个错误的堆栈跟踪,这是:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder); // This needs to go before the other rules!
modelBuilder.Entity<User>().ToTable("Users").Property(p => p.Id).HasColumnName("UserId");
modelBuilder.Entity<IdentityUserRole>().ToTable("UserRoles");
modelBuilder.Entity<IdentityUserLogin>().ToTable("UserLogins");
modelBuilder.Entity<IdentityUserClaim>().ToTable("UserClaims").Property(p => p.Id).HasColumnName("UserClaimId");
modelBuilder.Entity<IdentityRole>().ToTable("Roles").Property(p => p.Id).HasColumnName("RoleId");
modelBuilder.Ignore<IdentityUser>();
}
问题出在包
Microsoft.AspNet.Membership.OpenAuth
这是版本1.0.1 升级到版本2它解决了使用外部帐户提供程序登录的问题。 有可能是在第1版中的错误导致冲突与实体框架6如下报道:https://connect.microsoft.com/VisualStudio/feedback/details/811035/microsoft-aspnet-membership-openauth-is-not-compatible-with-entity-framework
这样做,因为我是用Microsoft.AspNet.Identity导致项目无限等问题*和身份和会员资格不兼容。
因此,我已经删除了与Microsoft.AspNet.Identity相关的所有内容,更改了用户,角色,成员资格等表的数据库模式。 现在一切正常。