Register.cshtml、Login.cshtml、Logout.cshtml、Manage/Index.cshtml など、/Areas/Identity/Pages/Accountフォルダ配下にあるいずれのRazorページでも、RazorページのコントローラーにDbContext(IdentityDbContext継承クラス)を追加することで、MVCコントローラーのようにDbContextを使用して、ユーザー認証時に独自のDB処理を加えることが出来る。
MVCコントローラーの場合
public class HomeController : Controller
{
private readonly ApplicationDbContext _context;
public HomeController(ApplicationDbContext context)
{
_context = context;
}
下記はRazorページのコントローラーにDbContextを追加した例。
before Register.cshtml.cs
[AllowAnonymous]
public class RegisterModel : PageModel
{
private readonly SignInManager<IdentityUser> _signInManager;
private readonly UserManager<IdentityUser> _userManager;
private readonly ILogger<RegisterModel> _logger;
private readonly IEmailSender _emailSender;
public RegisterModel(
UserManager<IdentityUser> userManager,
SignInManager<IdentityUser> signInManager,
ILogger<RegisterModel> logger,
IEmailSender emailSender)
{
_userManager = userManager;
_signInManager = signInManager;
_logger = logger;
_emailSender = emailSender;
}
after Register.cshtml.cs
[AllowAnonymous]
public class RegisterModel : PageModel
{
private readonly ApplicationDbContext _context;
private readonly SignInManager<IdentityUser> _signInManager;
private readonly UserManager<IdentityUser> _userManager;
private readonly ILogger<RegisterModel> _logger;
private readonly IEmailSender _emailSender;
public RegisterModel(
ApplicationDbContext context,
UserManager<IdentityUser> userManager,
SignInManager<IdentityUser> signInManager,
ILogger<RegisterModel> logger,
IEmailSender emailSender)
{
_context = context;
_userManager = userManager;
_signInManager = signInManager;
_logger = logger;
_emailSender = emailSender;
}
下記は DbContext(Entity Framework Core)からストアドプロシージャを実行した例。
Insert、Update系のストアドプロシージャを実行する場合。
_context.Database
.ExecuteSqlCommand("EXECUTE usr.spUserSetting_Insert @No, @BackgroundColor",
new SqlParameter("@No", No),
new SqlParameter("@BackgroundColor", color));
Select系のストアドプロシージャを実行する場合。
var a = _context.UserSetting
.FromSql("EXECUTE usr.spUserSetting_Select @No",
new SqlParameter("@No", No))
.ToList();
最近のコメント