【发布时间】:2017-01-06 10:27:09
【问题描述】:
我在根据返回的项目从数据库中验证选定用户时遇到问题。我找到了一个解决方案,但我并不认为它是正确的(即使它正在工作)。
这是发生了什么(简化)。
我有以下类连接到数据库:
public class Company
{
[Key]
public int Id { get; set; }
public string CompanyName { get; set; }
public string Description { get; set; }
public ApplicationUser CEO { get; set; }
}
这意味着一个公司可以有一个 CEO(一家公司的所有者),但 CEO 可以有多个公司(不同的故事,现在只是解释)。
然后我有一个 Controller CompaniesController 如下所示:
public IActionResult Index()
{
var items = _context.Companies.Include(n=>n.CEO).ToList();
return View(items);
}
返回数据库中所有公司的List<Company>。此外,如果我不输入.Include(n=>n.CEO),那么 CEO 字段将为空。
终于在View上我有以下几点:
@foreach (var item in Model)
{
<tr>
<td>@item.CompanyName</td>
<td>@item.Description</td>
@if (@item.CEO?.Email == User.Identity.Name)
{
//Show edit button for CEO
<td><a asp-action="Edit" asp-route-id="@item.Id">Edit</a></td>
}
else
{
//Logged user is not expected user therefore insert empty column and do not show button
<td></td>
}
</tr>
}
我检查从我的模型返回的CEO 是否是主动登录用户的方法是比较他们的电子邮件地址(用户需要被授权进入此页面,因此他将始终处于登录状态)。
问题:有没有更好、更优雅的方法来检查List<Company>中每个项目的活跃用户是否是CEO,或者这是一种正确的方法?
此外,我将用户数据存储到Company 数据库表的方式是否正确?我采用了本机身份模型,它会在数据库中自动生成 4 或 5 个身份表,因此当我检查 SQL 数据库中的 CEO 字段时,我可以看到这只是对 UserId 的引用。
在此问题上的任何帮助/建议将不胜感激。
【问题讨论】:
标签: c# asp.net-mvc database asp.net-identity asp.net-core-mvc