使用 Entity Framework 在 ASP.NET MVC 中获取特定用户数据
Getting specific user data in ASP.NET MVC with Entity Framework
所以我正在尝试为登录的特定用户获取数据库中记录的数据列表。这应该是一个简单的任务,但我无法让它工作。
这是我尝试过的方法,但出现以下错误:
"The Include path expression must refer to a navigation property defined on the type. Use dotted paths for reference navigation properties and the Select operator for collection navigation properties."
这是一些代码:
型号:
public partial class TimesheetEntry
{
[Key]
[Column(Order = 0)]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int UserId { get; set; }
[Key]
[Column(Order = 1)]
[StringLength(50)]
public string ProjectId { get; set; }
[Key]
[Column(Order = 2, TypeName = "date")]
public DateTime EntryDate { get; set; }
public decimal HoursWorked { get; set; }
public virtual Project Project { get; set; }
public virtual User User { get; set; }
}
查看:
@model IEnumerable<Aviato.Models.TimesheetEntry>
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Index</h2>
<p>
@Html.ActionLink("Create", "Create")
</p>
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.UserId)
</th>
<th>
@Html.DisplayNameFor(model => model.Project.ProjectName)
</th>
<th>
@Html.DisplayNameFor(model => model.EntryDate)
</th>
<th>
@Html.DisplayNameFor(model => model.HoursWorked)
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.UserId)
</td>
<td>
@Html.DisplayFor(modelItem => item.Project.ProjectName)
</td>
<td>
@Html.DisplayFor(modelItem => item.EntryDate)
</td>
<td>
@Html.DisplayFor(modelItem => item.HoursWorked)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.UserId }) |
@Html.ActionLink("Details", "Details", new { id=item.UserId }) |
@Html.ActionLink("Delete", "Delete", new { id=item.UserId })
</td>
</tr>
}
</table>
<div>
@Html.ActionLink("Index", "Index", "User")
</div>
控制器:
public class TimesheetEntryController : Controller
{
private readonly AviatoModel _db = new AviatoModel();
public ActionResult Index()
{
var userId = (int)Session["userId"]; // I have made a breakpoint and confirm that the user get it's unique Id.
var user = _db.Users.Find(userId);
var timesheetentries = _db.TimesheetEntries.Include(t => t.Project).Include(t => t.User == user);
return View(timesheetentries.ToList());
}
只需要删除控制器中的前两行代码就可以轻松获取数据库中的所有记录,但这不是我的目标。
请帮忙!
保持简单,不要过于复杂。只需按用户 ID 过滤条目。
var userId = (int)Session["userId"];
return View(timesheetentries.Where(t => t.UserId == userId).ToList());
所以我正在尝试为登录的特定用户获取数据库中记录的数据列表。这应该是一个简单的任务,但我无法让它工作。
这是我尝试过的方法,但出现以下错误:
"The Include path expression must refer to a navigation property defined on the type. Use dotted paths for reference navigation properties and the Select operator for collection navigation properties."
这是一些代码:
型号:
public partial class TimesheetEntry
{
[Key]
[Column(Order = 0)]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int UserId { get; set; }
[Key]
[Column(Order = 1)]
[StringLength(50)]
public string ProjectId { get; set; }
[Key]
[Column(Order = 2, TypeName = "date")]
public DateTime EntryDate { get; set; }
public decimal HoursWorked { get; set; }
public virtual Project Project { get; set; }
public virtual User User { get; set; }
}
查看:
@model IEnumerable<Aviato.Models.TimesheetEntry>
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Index</h2>
<p>
@Html.ActionLink("Create", "Create")
</p>
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.UserId)
</th>
<th>
@Html.DisplayNameFor(model => model.Project.ProjectName)
</th>
<th>
@Html.DisplayNameFor(model => model.EntryDate)
</th>
<th>
@Html.DisplayNameFor(model => model.HoursWorked)
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.UserId)
</td>
<td>
@Html.DisplayFor(modelItem => item.Project.ProjectName)
</td>
<td>
@Html.DisplayFor(modelItem => item.EntryDate)
</td>
<td>
@Html.DisplayFor(modelItem => item.HoursWorked)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.UserId }) |
@Html.ActionLink("Details", "Details", new { id=item.UserId }) |
@Html.ActionLink("Delete", "Delete", new { id=item.UserId })
</td>
</tr>
}
</table>
<div>
@Html.ActionLink("Index", "Index", "User")
</div>
控制器:
public class TimesheetEntryController : Controller
{
private readonly AviatoModel _db = new AviatoModel();
public ActionResult Index()
{
var userId = (int)Session["userId"]; // I have made a breakpoint and confirm that the user get it's unique Id.
var user = _db.Users.Find(userId);
var timesheetentries = _db.TimesheetEntries.Include(t => t.Project).Include(t => t.User == user);
return View(timesheetentries.ToList());
}
只需要删除控制器中的前两行代码就可以轻松获取数据库中的所有记录,但这不是我的目标。
请帮忙!
保持简单,不要过于复杂。只需按用户 ID 过滤条目。
var userId = (int)Session["userId"];
return View(timesheetentries.Where(t => t.UserId == userId).ToList());