【发布时间】:2018-02-12 09:45:25
【问题描述】:
我正在使用 Entity Framework Core 开发 .NET Core 应用程序。我有三个表 Questions、Answer 和 AnswerType 所以架构是
question <-- 1:* --> Answers <-- 1:1--> AnswerTypes
我需要运行查询,返回带有 ICollection 的 Answer 问题,进一步 Answer 带有 AnswerType
问题
public class QuestionDataModel
{
public QuestionDataModel()
{
Answers = new HashSet<AnswerDataModel>();
}
public Guid Id { get; set; }
public virtual ICollection<AnswerDataModel> Answers { get; set; }
}
回答
public class AnswerDataModel
{
public AnswerDataModel()
{
}
public Guid Id { get; set; }
public Guid QuestionId { get; set; }
public virtual QuestionDataModel Question { get; set; }
public string Value { get; set; }
public Guid AnswerStatusTypeId { get; set; }
public virtual AnswerStatusTypeDataModel AnswerStatusType { get; set; }
}
AnswerStatusType
public class AnswerStatusTypeDataModel
{
public AnswerStatusTypeDataModel()
{
Answers = new HashSet<AnswerDataModel>();
}
public Guid Id { get; set; }
public string Name { get; set; }
public virtual ICollection<AnswerDataModel> Answers { get; set; }
}
我已尝试使用嵌套连接来获取集合中每个答案的 AnswerStatusType,但出现错误“声明的匿名类型成员无效,必须使用成员分配、简单名称或成员访问来声明匿名类型成员”。此错误出现在以下代码的第二个嵌套连接中,
linq
var query3 = Context.Questions.Join(Context.Answers,
question => question.Id,
answer => answer.QuestionId,
(question, answer) => new
{
question.Id,
question.Title,
question.Answers.Join(Context.AnswerStatusTypes,
answer => answer.AnswerStatusTypeId,
answerStatus => answerStatus.Id,
(answers, answerStatus) => new
{
answerStatus
})
}
);
配置类
and configuration classes as
问题配置
public void Configure(EntityTypeBuilder<QuestionDataModel> builder)
{
builder.ToTable("Questions");
builder.HasKey(question => question.Id);
builder.HasMany(question => question.Answers);
}
回答配置
public void Configure(EntityTypeBuilder<AnswerDataModel> builder)
{
builder.ToTable("Answers");
builder.HasKey(answer => answer.Id);
builder
.HasOne(answer => answer.Question)
.WithMany(question => question.Answers)
.HasForeignKey(answer => answer.QuestionId);
builder
.HasOne(answer => answer.AnswerStatusType)
.WithMany(answerType => answerType.Answers)
.HasForeignKey(answer => answer.AnswerStatusTypeId);
}
答案状态配置
public void Configure(EntityTypeBuilder<AnswerStatusTypeDataModel> builder)
{
builder.ToTable("AnswerStatusTypes");
builder.HasKey(answerStatusType => answerStatusType.Id);
builder.HasMany(answerStatusType => answerStatusType.Answers);
}
【问题讨论】:
-
在谷歌上搜索异常时,您没有得到任何提示吗?
标签: linq .net-core entity-framework-core