我使用代码优先,实体,MVC3 +剃刀,我们有很多步骤在他们的表单(这也必须被审计)
我有Forms,它有Steps,所以模型看起来像这样。
public class MyForm
{
public int FormId { get; set; }
public Guid UniqueReferenceId { get; set; }
public DateTime DateCreatedOn { get; set; }
public string Name { get; set; }
public string DetailsOfContact { get; set; }
public virtual ICollection<AuditItem> AuditItems { get; set; }
}
public class AuditItem
{
public int AuditItemId { get; set; }
public int FormId { get; set; }
public string ActionByUserUid { get; set; }
public DateTime DateOfAction { get; set; }
public int Step { get; set; }
public virtual MyForm MyForm { get; set; }
}然后,当我想要显示一个用户界面时,麻烦就来了,它显示了表单的摘要信息以及最近的步骤,详细说明了提交的许多表单的进度,以及它们所处的步骤和摘要。即使只有几条记录,性能也很差,更不用说我们有数千条记录了。我必须跨表进行查询,如下所示:
我必须从最新的日期获取步骤,而不仅仅是最新的“步骤”编号,因为表单可以返回到前一步骤。
int latestAuditStep = myForm.AuditItems
.OrderByDescending(ai => ai.DateOfAction)
.Select(ai => ai.Step)
.First();显然,这是相当昂贵的,我正在寻找一种更好的方法来解决这个建模问题。
注意:理想情况下,我会考虑使用WWF,因为这似乎是结合使用的最好工具,但我没有足够的时间来学习这一点,而不是仅仅“完成工作”,所以不知道它是否会有所帮助。
发布于 2012-11-29 17:19:02
仍然不完美,但是
return AuditItems.OrderBy(ai => ai.DateOfAction).Last()当然缩短了代码。
发布于 2012-10-02 00:05:34
考虑使用数据库视图。
并在FormID和DateOfAction列上创建数据库索引。
https://stackoverflow.com/questions/12669667
复制相似问题