我有一个使用Entity Framework的应用程序但是我的理解是,如果连接不在主键上,则最新的Entity Framework仍然无法连接表。
因此,我有C#代码调用连接某些表并返回我的数据的存储过程。这是我的问题的简化版本。
我有一个返回问题数据的关系数据库。如果有一个问题有五个答案,那么将返回五行,每行将有相同的问题信息。
以下是数据进入的类:
public partial class Result1
{
public Guid QuestionUId { get; set; }
public string Text { get; set; }
public int AnswerId { get; set; }
public string AnswerText { get; set; }
}
我需要的是获取此关系数据并创建Question类的集合:
public partial class Question
{
public Guid QuestionUId { get; set; }
public string Text { get; set; }
public string Answer { get; set; }
public ICollection<Answer> Answers { get; set; }
}
public partial class Answer
{
public int AnswerId { get; set; }
public string AnswerText { get; set; }
}
有人可以告诉我如何获取数据并将其放入Question类中以便Answers字段也正确填充吗?
这是我到目前为止所拥有的:
var sql = @"dbo.sp_get_questions @UserId,
@UserTestId;";
SqlParameter[] parameters = new SqlParameter[]
{
new SqlParameter("@UserId", Int32.Parse(User.Identity.GetUserId())),
new SqlParameter("@UserTestId", userTestId)
};
try
{
var query = db.Database.SqlQuery<Result1>(sql, parameters);
var questions1 = await query.ToListAsync();
var questions2 = questions1
.Select((t, index) => new
问题是我不知道怎么做。选择,或者即使我采取了正确的方法。
希望有人可以帮助我。
答案 0 :(得分:3)
如果您对EF加入的方式不满意,您仍可以创建自己的。我不确定您的数据是如何构建的,但您可以编写如下内容:
context.Questions
.GroupJoin
(
context.Answers,
x=>x.Id, // this is the pk on Questions
x=>x.QuestionId //this is the fk on Answers
(q,a)=>new Question
{
q.QuestionUId,
q.Text,
Answers = a.Select(an=>new Answer{an.AnswerId,an.AnswerText})
}
)
这将产生一系列问题,其中每个问题都有一组答案。