Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 找不到ASP.Net OpenAuth登录方法System.Data.Entity.ModelConfiguration.EntityTypeConfiguration_C#_Asp.net_Entity Framework_Owin_Dotnetopenauth - Fatal编程技术网

C# 找不到ASP.Net OpenAuth登录方法System.Data.Entity.ModelConfiguration.EntityTypeConfiguration

C# 找不到ASP.Net OpenAuth登录方法System.Data.Entity.ModelConfiguration.EntityTypeConfiguration,c#,asp.net,entity-framework,owin,dotnetopenauth,C#,Asp.net,Entity Framework,Owin,Dotnetopenauth,我正在尝试使用外部提供商启用登录,特别是在网络表单应用程序中的Facebook 我正在使用asp.NET4.5C和实体框架6 本地帐户登录工作正常,但当我尝试使用facebook帐户登录时,会出现以下两个错误: 1-在我第一次运行时,请尝试登录: 未找到方法:“System.Data.Objects.ObjectContext System.Data.Entity.Infrastructure.IOObjectContextAdapter.get_ObjectContext()”。 [Stack

我正在尝试使用外部提供商启用登录,特别是在网络表单应用程序中的Facebook

我正在使用asp.NET4.5C和实体框架6

本地帐户登录工作正常,但当我尝试使用facebook帐户登录时,会出现以下两个错误:

1-在我第一次运行时,请尝试登录:

未找到方法:“System.Data.Objects.ObjectContext System.Data.Entity.Infrastructure.IOObjectContextAdapter.get_ObjectContext()”。
[StackTrace]

[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
[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
...]
然后 2-每次我尝试再次使用facebook登录时:

未找到方法:“Void System.Data.Entity.ModelConfiguration.EntityTypeConfiguration”1.ToTable(System.String) [StackTrace]

[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
[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
...]
这两个错误都出现在RegisterExternalLogin.aspx.cs中的以下行(OpenAuth.Login()方法)中:

if(OpenAuth.Login(authResult.Provider, authResult.ProviderUserId, createPersistentCookie: false))
        {
            RedirectToReturnUrl();
        }
authResult对象具有正确的值,因此facebook身份验证工作正常。 当OpenAuth.Login方法试图写入DB时,它出现了一些错误,但我不明白是什么,因为我在调试错误时没有收到任何明确的细节。即使使用step in debug,我也会得到该方法的错误页面,而不会得到其他任何东西

我已安装以下软件包:

<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的信息:

<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" />

正如在第一个错误的堆栈跟踪中提到的OnModelCreating方法一样,它是:

        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>();
    }
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);//这需要在其他规则之前执行!
modelBuilder.Entity().ToTable(“Users”).Property(p=>p.Id).HasColumnName(“UserId”);
modelBuilder.Entity().ToTable(“用户角色”);
modelBuilder.Entity().ToTable(“用户登录”);
modelBuilder.Entity().ToTable(“UserClaims”).Property(p=>p.Id).HasColumnName(“UserClaimId”);
modelBuilder.Entity().ToTable(“Roles”).Property(p=>p.Id).HasColumnName(“RoleId”);
Ignore();
}

问题出在程序包中

Microsoft.AspNet.Membership.OpenAuth
那是1.0.1版 升级到版本2可以解决使用外部帐户提供商登录的问题。 版本1中可能存在导致与Entity Framework 6冲突的错误,如下所述:

当我使用Microsoft.AspNet.Identity.*
时,这样做会在项目中造成无限的其他问题,而Identity和Membership是不兼容的

因此,我删除了与Microsoft.AspNet.Identity相关的所有内容,更改了用户、角色、成员等表的DB模式。 现在一切都很好