[解決済み] エンティティタイプ ApplicationUser は、現在のコンテキストに対するモデルの一部ではありません。
質問
私は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="data source=MyServer\MyDataBase;initial catalog=Cliniciel_WebRV_Master;user id=XXX;password=XXXX;MultipleActiveResultSets=True;App=EntityFramework"" 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="data source=MyServer\MyDataBase;initial catalog=Cliniciel_WebRV_DEV;user id=XXX;password=XXXX;MultipleActiveResultSets=True;App=EntityFramework"" 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="data source=MyServer\MyDataBase;initial catalog=Cliniciel_WebRV_Master;user id=XXX;password=XXXX;multipleactiveresultsets=True;application name=EntityFramework"" providerName="System.Data.EntityClient" />
</connectionStrings>
ここでは、ID認証に接続文字列 "Cliniciel_WebRV_Oauth" を使用しています。
起動時にoauthTokenを設定する
スタートアップ.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);
}
}
}
}
以下は、私が受け取ったエラーです。
ApplicationUser エンティティタイプは、そのモデルの一部ではありません。 現在のコンテキスト
これがそのトレースです。
<ブロッククオート32ページ:var userManager = コンテキスト.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:\Usersaboucher⇄Desktop⇄WebRV-2016-05-12 - (Fichier source : c:⇄WebRV-2016-05-12)
CopieCliniciel_WebRV ╱WebRVProviders ╱CustomOAuthProvider.cs
言語 : 34
パイルの跡。
[InvalidOperationException: ApplicationUser タイプは、アプリケーションユーザーではありません。
現在の状況下では、モデルに含まれていません。]
System.Data.Entity.Internal.InternalContext.UpdateEntitySetMappingsForType(タイプ
entityType) +4479799
System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(タイプ
entityType) +37
System.Data.Entity.Internal.Linq.InternalSet
1.Initialize() +53
1.get_InternalContext()
+16 System.Data.Entity.Infrastructure.DbQuery(システムデータ エンティティ インフラストラクチャ ドット インクエリ
System.Data.Entity.Internal.Linq.InternalSet1.System.Linq.IQueryable.get_Provider()
+39 System.Data.Entity.QueryableExtensions.FirstOrDefaultAsync(IQueryable
1
ソース、エクスプレッション
1 predicate, CancellationToken cancellationToken)
+154 System.Data.Entity.QueryableExtensions.FirstOrDefaultAsync(IQueryable
1
ソース, 式
1 predicate) +163
1.GetResult()
+28 Microsoft.AspNet.Identity.CultureAwaiter
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.TaskAwaiter1.GetResult() +123 Microsoft.AspNet.Identity.<FindAsync>d__12.MoveNext() +601
1.GetResult()
+28 WebRV.Providers.d__0.MoveNext() in c:♪Users♪Boucher♪Desktop♪WebRV-2016-05-12 - (C:♪Users♪Boucher♪Desktop♪WebRV-2016-05-12)
CopieCliniciel_WebRV ╱WebRVProviders╱CustomOAuthProvider.cs:34
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
タスク) +92
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
task) +92
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task
task) +58 System.Runtime.CompilerServices.TaskAwaiter
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(タスク
タスク) +58 System.Runtime.CompilerServices.TaskAwaiter.GetResult()。
+26 Microsoft.Owin.Security.OAuth.d__3f.MoveNext()
+863 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(タスク
タスク) +92
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(タスク
タスク) +58 System.Runtime.CompilerServices.TaskAwaiter(システムランタイムコンパイラサービスタスクウェイター
1.GetResult()
+28 Microsoft.Owin.Security.OAuth.<InvokeTokenEndpointAsync>d__22.MoveNext()
+2336 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
task) +92
1.GetResult()
+28 Microsoft.Owin.Security.Infrastructure.d__0.MoveNext() +664 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(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
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(タスク
タスク) +58 System.Runtime.CompilerServices.TaskAwaiter.GetResult()を実行します。
+26 Microsoft.AspNet.Identity.Owin.d__0.MoveNext() +641 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(タスク
タスク) +92
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(タスク
タスク) +58 System.Runtime.CompilerServices.TaskAwaiter.GetResult()を実行します。
+26 Microsoft.AspNet.Identity.Owin.d__0.MoveNext() +641 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(タスク
タスク) +92
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(タスク
タスク) +58 System.Runtime.CompilerServices.TaskAwaiter.GetResult()(タスクウェイターゲットリザルト)。
+26 Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.d__5.MoveNext()。
+287 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(タスク
タスク) +92
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(タスク
タスク) +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を渡してApplication 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メソッドの1行目)。
var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(context.Get<EducationContext>()));
関連
-
[解決済み】"出力タイプがクラスライブラリのプロジェクトは直接起動できない"
-
[解決済み】プログラム実行中に1秒待つ
-
[解決済み】「namespace x already contains a definition for x」エラーの修正方法は?VS2010にコンバートした後に発生しました。
-
[解決済み】値をNULLにすることはできません。パラメータ名:source
-
[解決済み】5.7.57 SMTP - MAIL FROMエラー時に匿名メールを送信するためにクライアントが認証されない
-
[解決済み】WSACancelBlockingCallの例外について
-
[解決済み】インデックスが範囲外でした。コレクションパラメータname:indexのサイズより小さく、非負でなければなりません。
-
[解決済み】プロセスが実行されているかどうかを知るには?
-
[解決済み】別のスレッドがこのオブジェクトを所有しているため、呼び出し側のスレッドはこのオブジェクトにアクセスできない
-
[解決済み] Could not find a part of the path ... binroslyncsc.exe
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] DBNullから他の型にオブジェクトをキャストすることができない
-
[解決済み】バックスラッシュを含むパス文字列のエスケープシーケンスが認識されない件
-
[解決済み】Unity3DでOnTriggerEnterが動作しない件
-
[解決済み】クロススレッド操作が有効でない。作成されたスレッド以外のスレッドからアクセスされたコントロール
-
[解決済み】Unity 「関連するスクリプトを読み込むことができません」「Win32Exception: システムは指定されたファイルを見つけることができません"
-
[解決済み】「...は'型'であり、与えられたコンテキストでは有効ではありません」を解決するにはどうすればよいですか?(C#)
-
[解決済み】ランダムなブーリアンを生成する最速の方法
-
[解決済み】Linq 構文 - 複数列の選択
-
[解決済み】WebResource.axdとは何ですか?
-
[解決済み】スレッド終了またはアプリケーションの要求により、I/O操作が中断されました。