EF4.1でのmvc3の使用(ストアドプロシージャを使用)。問題のリストがあり、各問題へのコメントのリストを含める必要があります。各問題モデルをループしてコメントを追加せずに、これを1つのprocと1つのモデルで実行できるかどうかはわかりません。これが私がこれまでに持っているものです:(要するに、より良いアプローチが必要です)
私の手順「SP_GetQuestionIssues」:
CREATE PROC [dbo].[SP_GetQuestionIssues]
(@ReviewID int)
AS
Select r.ReviewID, q.QuestionId, s.Title Step, q.QuestionText Question, r.AnswerValue Answer, IsIssue
From dbo.Questions q
Join dbo.Steps s
on q.StepId = s.StepId
Join dbo.QuestionFlagged qf
on q.questionId = qf.questionId
Join dbo.Responses r
on q.questionId = r.QuestionID
Where IsIssue=1
AND r.ReviewID = @ReviewID
AND qf.ReviewID = @ReviewID
Order by s.StepID, s.stepOrder, q.DisplayOrder
私のモデル「QuestionIssue」:
public class QuestionIssue
{
public int ReviewID { get; set; }
public int QuestionId { get; set; }
public string Step { get; set; }
public string Question { get; set; }
public string Answer { get; set; }
public bool IsIssue { get; set; }
public virtual IEnumerable<Comment> Comments { get; set; }
}
私のモデル「コメント」:
public class Comment
{
public int CommentId { get; set; }
public int ReviewId { get; set; }
public Nullable<int> QuestionId { get; set; }
public string Reviewer { get; set; }
public string CommentText { get; set; }
public bool IsMemo { get; set; }
}
私の行動:
SqlParameter param = new SqlParameter("@ReviewID", Id);
var issues = db.Database.SqlQuery<QuestionIssue>("SP_GetQuestionIssues @ReviewID", param).ToList();
これよりも優れたアプローチが必要です(疑似コード):
foreach(var issue in issues)
{
var comments = somefunction.getcomments(issue.reviewId, issue.questionId)
issue.Comments.add(comment)
}