c# – 实体类型ApplicationUser不是当前上下文的模型的一部分

c# – 实体类型ApplicationUser不是当前上下文的模型的一部分,第1张

概述我在 Asp.net中有一个带有Entity Framework 6和数据库的Web应用程序.当用户连接时,我遇到了问题.这是我的代码: Web.config文件 <connectionStrings> <add name="DefaultConnection" connectionString="data source=MyServer\MyDataBase;initial catalog= 我在 Asp.net中有一个带有Entity Framework 6和数据库的Web应用程序.当用户连接时,我遇到了问题.这是我的代码:

Web.config文件

<connectionStrings>  <add name="DefaultConnection" connectionString="data source=MyServer\MyDataBase;initial catalog=ClinicIEl_WebRV_Master;User ID=XXX;Password=XXXX" provIDername="System.Data.sqlClIEnt" />  <add name="ClinicIEl_WebRV_MasterEntitIEs" connectionString="Metadata=res://*/Models.EntitIEs.ClinicIEl_WebRV_Master.csdl|res://*/Models.EntitIEs.ClinicIEl_WebRV_Master.ssdl|res://*/Models.EntitIEs.ClinicIEl_WebRV_Master.msl;provIDer=System.Data.sqlClIEnt;provIDer connection string=&quot;data source=MyServer\MyDataBase;initial catalog=ClinicIEl_WebRV_Master;user ID=XXX;password=XXXX;MultipleActiveResultSets=True;App=EntityFramework&quot;" provIDername="System.Data.EntityClIEnt" />  <add name="ClinicIEl_WebRV_EntitIEs" connectionString="Metadata=res://*/Models.EntitIEs.ClinicIEl_WebRV_EntitIEs.csdl|res://*/Models.EntitIEs.ClinicIEl_WebRV_EntitIEs.ssdl|res://*/Models.EntitIEs.ClinicIEl_WebRV_EntitIEs.msl;provIDer=System.Data.sqlClIEnt;provIDer connection string=&quot;data source=MyServer\MyDataBase;initial catalog=ClinicIEl_WebRV_DEV;user ID=XXX;password=XXXX;MultipleActiveResultSets=True;App=EntityFramework&quot;" provIDername="System.Data.EntityClIEnt" />  <add name="ClinicIEl_WebRV_Oauth" connectionString="Metadata=res://*/Models.EntitIEs.ClinicIEl_WebRV_Oauth.csdl|res://*/Models.EntitIEs.ClinicIEl_WebRV_Oauth.ssdl|res://*/Models.EntitIEs.ClinicIEl_WebRV_Oauth.msl;provIDer=System.Data.sqlClIEnt;provIDer connection string=&quot;data source=MyServer\MyDataBase;initial catalog=ClinicIEl_WebRV_Master;user ID=XXX;password=XXXX;multipleactiveresultsets=True;application name=EntityFramework&quot;" provIDername="System.Data.EntityClIEnt" />           </connectionStrings>

在这里,我使用连接字符串“ClinicIEl_WebRV_Oauth”进行身份验证.

我在启动时配置我的oauthToken

Startup.cs

private voID ConfigureOAuthTokenGeneration(IAppBuilder app)        {            //// Configure the db context and user manager to use a single instance per request            app.CreatePerOwinContext(ApplicationDbContext.Create);            app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);            //app.CreatePerOwinContext<ApplicationRoleManager>(ApplicationRoleManager.Create);            OAuthAuthorizationServerOptions OAuthServerOptions = new OAuthAuthorizationServerOptions()            {                //For Dev enviroment only (on production should be AllowInsecurehttp = false)                #if DEBUG                AllowInsecurehttp = true,#endif                TokenEndpointPath = new PathString("/oauth/token"),AccesstokenExpireTimeSpan = TimeSpan.FromDays(1),ProvIDer = new CustomOAuthProvIDer(),AccesstokenFormat = new CustomJwtFormat("http://localhost:55555/")            };            // OAuth 2.0 Bearer Access Token Generation            app.USEOAuthAuthorizationServer(OAuthServerOptions);        } private voID ConfigureOAuthTokenConsumption(IAppBuilder app)        {            var issuer = "http://localhost:55555/";            string audIEnceID = ConfigurationManager.AppSettings["as:AudIEnceID"];            byte[] audIEnceSecret = TextEnCodings.Base64Url.Decode(ConfigurationManager.AppSettings["as:AudIEnceSecret"]);            // API controllers with an [Authorize] attribute will be valIDated with JWT            app.UseJwtBearerAuthentication(                new JwtBearerAuthenticationoptions                {                    AuthenticationMode = AuthenticationMode.Active,AllowedAudIEnces = new[] { audIEnceID },IssuerSecurityTokenProvIDers = new IISsuerSecurityTokenProvIDer[]                    {                        new SymmetricKeyIssuerSecurityTokenProvIDer(issuer,audIEnceSecret)                    }                });        }

ApplicationDBContext.cs

using Microsoft.AspNet.IDentity.EntityFramework;using System;using System.linq;using System.Web;using System.Web.Services;using System.Web.SessionState;using WebRV.Models.EntitIEs;namespace WebRV.Infrastructure{    public class ApplicationDbContext : IDentityDbContext<ApplicationUser>  //DOIT CREER APPliCATION USER.    {        public ApplicationDbContext()            : base("ClinicIEl_WebRV_Oauth",throwIfV1Schema: false)        {            Configuration.ProxyCreationEnabled = false;            Configuration.LazyLoadingEnabled = false;        }        [WebMethod(EnableSession = true)]        public static ApplicationDbContext Create()        {            return new ApplicationDbContext();        }    }}

CustomOAuthProvIDer.cs

using System;using System.linq;using WebRV.Infrastructure;using Microsoft.Owin.Security;using Microsoft.Owin.Security.OAuth;using System.Security.Claims;using System.Threading.Tasks;using Microsoft.AspNet.IDentity.Owin;using System.Web.Mvc;using WebRV.Models.EntitIEs;using System.Net;using System.Web.http;namespace WebRV.ProvIDers{    public class CustomOAuthProvIDer : OAuthAuthorizationServerProvIDer    {        [ValIDateAntiForgeryToken]        public overrIDe Task ValIDateClIEntAuthentication(OAuthValIDateClIEntAuthenticationContext context)        {            context.ValIDated();            return Task.Fromresult<object>(null);        }        public overrIDe async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)        {                var allowedOrigin = "*";                context.OwinContext.Response.headers.Add("Access-Control-Allow-Origin",new[] { allowedOrigin });                var userManager = context.OwinContext.GetUserManager<ApplicationUserManager>();                ApplicationUser user = await userManager.FindAsync(context.Username,context.Password);                if (user == null)                {                    context.SetError("invalID_grant","The user name or password is incorrect.");                }                else                {                    //if (!user.EmailConfirmed)                    //{                    //    context.SetError("invalID_grant","User dID not confirm email.");                    //    return;                    //}                    ClaimsIDentity oAuthIDentity = await user.GenerateUserIDentityAsync(userManager,"JWT");                    var ticket = new AuthenticationTicket(oAuthIDentity,null);                    context.ValIDated(ticket);                }        }    }}

这是我得到的错误:

The ApplicationUser entity type is not part of the model for the
current context.

这是跟踪:

ligne 32 : var userManager =
context.OwinContext.GetUserManager(); ligne 33
: ligne 34 : ApplicationUser user = await
userManager.FindAsync(context.Username,context.Password); ligne 35 :
ligne 36 : if (user == null)

FichIEr source : c:\Users\aboucher\Desktop\WebRV-2016-05-12 –
copIE\ClinicIEl_WebRV\WebRV\WebRV\ProvIDers\CustomOAuthProvIDer.cs
ligne : 34

Trace de la pile:

[InvalIDOperationException: Le type d’entité ApplicationUser ne fait
pas partIE du modèle pour le contexte actuel.]
System.Data.Entity.Internal.InternalContext.UpdateEntitySetMapPingsForType(Type
entityType) +4479799
System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type
entityType) +37
System.Data.Entity.Internal.linq.InternalSet1.Initialize() +53
System.Data.Entity.Internal.linq.InternalSet
1.get_InternalContext()
+16 System.Data.Entity.Infrastructure.Dbquery1.System.linq.Iqueryable.get_ProvIDer()
+39 System.Data.Entity.queryableExtensions.FirstOrDefaultAsync(Iqueryable
1
source,Expression1 predicate,CancellationToken cancellationToken)
+154 System.Data.Entity.queryableExtensions.FirstOrDefaultAsync(Iqueryable
1
source,Expression1 predicate) +163
Microsoft.AspNet.IDentity.EntityFramework.<GetUserAggregateAsync>d__6c.MoveNext()
+807 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
task) +92
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDeBUGgerNotification(Task
task) +58 System.Runtime.CompilerServices.TaskAwaiter
1.GetResult()
+28 Microsoft.AspNet.IDentity.CultureAwaiter1.GetResult() +123 Microsoft.AspNet.IDentity.<FindAsync>d__12.MoveNext() +601
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
task) +92
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDeBUGgerNotification(Task
task) +58 System.Runtime.CompilerServices.TaskAwaiter
1.GetResult()
+28 WebRV.ProvIDers.d__0.MoveNext() in c:\Users\aboucher\Desktop\WebRV-2016-05-12 –
copIE\ClinicIEl_WebRV\WebRV\WebRV\ProvIDers\CustomOAuthProvIDer.cs:34
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
task) +92
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDeBUGgerNotification(Task
task) +58 System.Runtime.CompilerServices.TaskAwaiter.GetResult()
+26 Microsoft.Owin.Security.OAuth.d__3f.MoveNext()
+863 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
task) +92
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDeBUGgerNotification(Task
task) +58 System.Runtime.CompilerServices.TaskAwaiter1.GetResult()
+28 Microsoft.Owin.Security.OAuth.<InvoketokenEndpointAsync>d__22.MoveNext()
+2336 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
task) +92
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDeBUGgerNotification(Task
task) +58 System.Runtime.CompilerServices.TaskAwaiter.GetResult()
+26 Microsoft.Owin.Security.OAuth.<InvokeAsync>d__0.MoveNext() +1733 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
task) +92
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDeBUGgerNotification(Task
task) +58 System.Runtime.CompilerServices.TaskAwaiter
1.GetResult()
+28 Microsoft.Owin.Security.Infrastructure.d__0.MoveNext() +664 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
task) +92
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDeBUGgerNotification(Task
task) +58 System.Runtime.CompilerServices.TaskAwaiter.GetResult()
+26 Microsoft.AspNet.IDentity.Owin.d__0.MoveNext() +641 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
task) +92
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDeBUGgerNotification(Task
task) +58 System.Runtime.CompilerServices.TaskAwaiter.GetResult()
+26 Microsoft.AspNet.IDentity.Owin.d__0.MoveNext() +641 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
task) +92
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDeBUGgerNotification(Task
task) +58 System.Runtime.CompilerServices.TaskAwaiter.GetResult()
+26 Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.d__5.MoveNext()
+287 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
task) +92
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDeBUGgerNotification(Task
task) +58 System.Runtime.CompilerServices.TaskAwaiter.GetResult()
+26 Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.d__2.MoveNext()
+272 System.Runtime.ExceptionServices.ExceptiondispatchInfo.Throw() +26 Microsoft.Owin.Host.SystemWeb.Infrastructure.ErrorState.Rethrow() +33
Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.StageAsyncResult.End(IAsyncResult
ar) +150
Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.IntegratedPipelineContext.EndFinalWork(IAsyncResult
ar) +42
System.Web.AsyncEventExecutionStep.System.Web.httpApplication.IExecutionStep.Execute()
+380 System.Web.httpApplication.ExecuteStep(IExecutionStep step,Boolean& completedSynchronously) +155

解决方法 ApplicationUserManager方法在哪里?

您需要通过传递DbContext来配置应用程序UserManager

public class ApplicationUserManager : UserManager<ApplicationUser>{    public ApplicationUserManager(IUserStore<ApplicationUser> store)        : base(store)    {    }    public static ApplicationUserManager Create(IDentityFactoryOptions<ApplicationUserManager> options,IOwinContext context)     {        var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(context.Get<EducationContext>()));        // Configure valIDation logic for usernames        manager.UserValIDator = new UserValIDator<ApplicationUser>(manager)        {            AllowOnlyAlphanumericUsernames = false,RequireUniqueEmail = true        };        // Configure valIDation logic for passwords        manager.PasswordValIDator = new PasswordValIDator        {            requiredLength = 6,RequireNonLetterOrDigit = true,requiredigit = true,RequireLowercase = true,RequireUppercase = true,};        // Configure user lockout defaults        manager.UserLockoutEnabledByDefault = true;        manager.DefaultAccountLockoutTimeSpan = TimeSpan.FromMinutes(5);        manager.MaxFailedAccessAttemptsBeforeLockout = 5;        // Register two factor authentication provIDers. This application uses Phone and Emails as a step of receiving a code for verifying the user        // You can write your own provIDer and plug it in here.        manager.RegisterTwoFactorProvIDer("Phone Code",new PhoneNumberTokenProvIDer<ApplicationUser>        {            messageformat = "Your security code is {0}"        });        manager.RegisterTwoFactorProvIDer("Email Code",new EmailTokenProvIDer<ApplicationUser>        {            Subject = "Security Code",BodyFormat = "Your security code is {0}"        });        manager.EmailService = new EmailService();        manager.SmsService = new SmsService();        var dataProtectionProvIDer = options.DataProtectionProvIDer;        if (dataProtectionProvIDer != null)        {            manager.UserTokenProvIDer =                 new DataProtectorTokenProvIDer<ApplicationUser>(dataProtectionProvIDer.Create("ASP.NET IDentity"));        }        return manager;    }}

最重要的是写这一行(Create方法中的第一行)

var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(context.Get<EducationContext>()));
总结

以上是内存溢出为你收集整理的c# – 实体类型ApplicationUser不是当前上下文模型的一部分全部内容,希望文章能够帮你解决c# – 实体类型ApplicationUser不是当前上下文的模型的一部分所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1243220.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-06
下一篇2022-06-06

发表评论

登录后才能评论

评论列表(0条)

    保存