スポンサーリンク

Accountフォルダ配下のRazorページでDbContextを使いたい場合

ASP.NET Core
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();

コメント

タイトルとURLをコピーしました