2016-03-03 50 views
0

我試圖啓用登錄使用外部提供商,特別是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>(); 
    } 

回答

0

問題出在包

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相關的所有內容,更改了用戶,角色,成員資格等表的數據庫模式。 現在一切正常。