0

私はCode First、Entities、MVC3 + Razorを使用しています。フォームには多くのステップが含まれています(これも監査する必要があります)

私は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 の使用を検討するのが理想的でしたが、単に「仕事を終わらせる」必要があるのではなく、事前にそれを学ぶ十分な時間がありませんでした。それが役に立ったかどうかはわかりません。

4

2 に答える 2

0

まだ完璧ではありませんが

return AuditItems.OrderBy(ai => ai.DateOfAction).Last()

確かにコードを短縮しました。

于 2012-11-29T09:19:01.930 に答える
0

データベース ビューの使用を検討してください。

FormID 列と DateOfAction 列にデータベース インデックスを作成します。

于 2012-10-01T16:05:34.473 に答える