在我的IdentityModels类中,我有一个名为Reports的属性,如下面的
public DbSet<Report> Reports { get; set; }
在我的数据库中,有一个具有相同名称的表,该属性从中提取数据。
我还有一个名为Report的模型(除了一些其他属性)还有这些
public class Report
{
//...
[Required]
public string State { get; set; }
[Column("reporter_id")]
public string ReporterId { get; set; }
[Required]
[Column("report_text")]
public string ReportText { get; set; }
//...
}
我还有一个视图,它是一个以Report为模型的强大视图。
我遇到问题的地方是我的模型有reporterId,它是具有用户详细信息的名为AspNetUsers
的不同表的外键。
我想显示用户名而不是id,因为Reports表只有userId,所以我无法显示用户名。
将user_name
表格中的AspNetUsers
字段作为模型的一部分会有什么好方法?显然,join
表和reports
表之间必须有aspNetUsers
语句,但我不确定如何最好地执行此操作。
答案 0 :(得分:1)
您必须更改模型,如下所示。
public class Report
{
[Required]
public string State { get; set; }
[ForeignKey("UserId")]
public virtual AspNetUser { get; set; }
public int UserId { get; set; }
[Required]
[Column("report_text")]
public string ReportText { get; set; }
}
public class AspNetUser
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Report> Reports { get; set;}
}
您的查询应该是这样的:
var query =
(from u in db.AspNetUsers
from r in u.Reports
select new { UserName = u.Name, ReportText = r.ReportText }).ToList();
答案 1 :(得分:1)
我的回答可能对您没有帮助,但我仍会发布,ViewModel专门用于这种情况,您需要在视图中显示两个或更多表数据。
首先,您需要创建一个ViewModel,让我们调用它UserReportViewModel
。在此视图模型中,您将添加一个其他属性UserName
,该属性将根据ReporterId
提取用户名。
public class UserReportViewModel
{
[Required]
public string State { get; set; }
[Column("reporter_id")]
public string ReporterId { get; set; }
[Required]
[Column("report_text")]
public string ReportText { get; set; }
public string UserName{ get; set; }
}
然后,假设您使用LINQ检索报告:
Dim ReportList As List(Of UserReportViewModel) = New List(Of UserReportViewModel)
ReportList = dbContext.Reports.Select(Function(x) New UserReportViewModel With {
.State = x.State, _
.ReporterId= x.ReporterId, _
.UserName= dbContext.Users.Find(x.ReporterId).UserName, _
.ReportText = x.ReportText, _
}).ToList()