1

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)
  }
4

1 に答える 1

0

私は3年後にこの質問に出くわしましたが、その価値については次のとおりです。

複数のレコードセット(バッチt-sql)を返すストアドプロシージャを調べてSqlDataReader.NextResult、疑似コードと同様にそれらを処理するために使用することもできます。

于 2016-04-07T16:09:24.970 に答える