【发布时间】:2020-01-10 17:57:59
【问题描述】:
我创建了一个 Razor Pages 项目,并创建了一个名为 company 的数据模型,并修改了用户身份以与公司建立关系。
public class ApplicationUser : IdentityUser
{
public string FirstName { get; set; }
public string Surname { get; set; }
public Company Company { get; set; }
}
public class Company
{
public int Id { get; set; }
public string Name { get; set; }
public string AccessCode { get; set; }
public ICollection<ApplicationUser> Employees { get; set; }
}
使用下面的代码,我可以创建一个公司并将该公司分配给用户
Company c = new Company { Name = Input.Name };
_context.Companies.Add(c);
await _context.SaveChangesAsync();
ApplicationUser u = await _userManager.GetUserAsync(User);
u.Company = c;
await _context.SaveChangesAsync();
所以我可以创建公司并将公司链接到用户但是当我尝试使用以下代码检查当前用户是否有与之关联的公司时,它无法获取公司,x.Company 返回 Null即使有一家公司与当前用户关联
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;
using Fleet_Man.Data;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
namespace Fleet_Man.Pages
{
public class CompanyModel : PageModel
{
private readonly UserManager<ApplicationUser> _userManager;
ApplicationDbContext _context;
public CompanyModel(UserManager<ApplicationUser> userManager, ApplicationDbContext appDbContext)
{
_userManager = userManager;
_context = appDbContext;
}
public Boolean CompanyMember { get; set; }
[BindProperty]
public InputModel Input { get; set; }
public string ReturnUrl { get; set; }
public string Message { get; set; }
public class InputModel
{
[Required]
[Display(Name = "Company Name")]
public string Name { get; set; }
}
public async Task<IActionResult> OnGetAsync(string returnUrl = null)
{
//ApplicationUser x = await _userManager.GetUserAsync(User);
//Updated to reflect suggestion below
ApplicationUser x = await _userManager.GetUserAsync(User).Inlcude(u => u.Company).FirstOrDefaultAsync(u => u.FirstName == User);
ReturnUrl = returnUrl;
if (x.Company == null)
{
CompanyMember = false;
Message = "You don't belong to a company.";
}
else
{
CompanyMember = true;
Message = "You belong to a company.";
}
return Page();
}
public async Task<IActionResult> OnPostAsync(string returnUrl = null)
{
if (ModelState.IsValid)
{
ReturnUrl = returnUrl;
Company c = new Company { Name = Input.Name };
_context.Companies.Add(c);
await _context.SaveChangesAsync();
ApplicationUser u = await _userManager.GetUserAsync(User);
u.Company = c;
await _context.SaveChangesAsync();
//var p = new Patient { Title = Input.Title, FirstName = Input.FirstName, Surname = Input.Surname, DOB = Input.DOB, NHSNumber = Input.NHSNumber };
//_context.Patients.Add(p);
//await _context.SaveChangesAsync();
//Message = "Patient (" + Input.FirstName + " " + Input.Surname + ") created successfully";
//return RedirectToPage("AllPatients");
}
return Page();
}
}
}
【问题讨论】:
标签: c# asp.net asp.net-identity razor-pages