【问题标题】:Adding subitems to a mvc model without needing to loop thru a list?将子项添加到 mvc 模型而不需要遍历列表?
【发布时间】:2016-04-08 00:09:24
【问题描述】:

在 EF 4.1 中使用 mvc 3(带有存储过程)。 我有一个问题列表,我需要在每个问题中包含一个 cmets 列表。不确定如何在一个过程和一个模型中完成此操作,而无需遍历每个问题模型并添加 cmets。这是我到目前为止所拥有的: (总之需要一个更好的方法)

我的程序“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)
  }

【问题讨论】:

  • 您的整个存储过程都可以使用 EF 完成。您需要使用它是否有特定原因?
  • 你能给我举个例子吗...我可以拥有一个 proc 并将其全部包装一个模型?

标签: asp.net-mvc-3 list stored-procedures entity-framework-4


【解决方案1】:

三年后我偶然发现了这个问题,但它的价值:

您可能已经查看了返回多个记录集(批处理 t-sql)的存储过程,并使用 SqlDataReader.NextResult 以类似于您的伪代码来处理它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-17
    • 1970-01-01
    • 2016-06-11
    • 1970-01-01
    • 2015-04-21
    • 2021-02-05
    相关资源
    最近更新 更多