【发布时间】:2019-08-10 13:23:26
【问题描述】:
我有3个相关表,Table1 => Table2 => Table3 关系就是这种类型。
我有来自 Table1 和 Table2 的数据,因为我有来自 Table1 的模型要显示,现在我的问题是 Table3,我无法获取要显示的数据。 我需要详细显示数据,我的项目是为民意调查。
- 表 1 = 问题(键是 QID)
- 表 2 = 答案选项(关键 ANID,q_ID 是问题的关键)
- Table3 = 结果(投票计数)(键是 RID,ans_ID 是 AnswerOption 的键)
控制器是默认代码:
public ActionResult Details(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Questions questions= db.Questions.Find(id);
if (questions== null)
{
return HttpNotFound();
}
return View(questions);
}
查看代码:
@foreach (var item in Model.Answers)
{
if (item != null)
{
<tr>
<td>
@Html.DisplayFor(x => item.AnswerName)
</td>
<td>
@Html.DisplayFor(x => item.Results.Result)
</td>
</tr>
}
模型问题:
public class Questions
{
public Questions()
{
Answers= new HashSet<Answers>();
}
[Key]
public int QID { get; set; }
public string Prasanje { get; set; }
public bool pubOdg { get; set; }
public int? avtor { get; set; }
public virtual ICollection<Answers> Answers { get; set; }
[ForeignKey("avtor")]
public virtual tbl_useri tbl_useri { get; set; }
}
模型答案:
public Answers()
{
Results= new HashSet<Results>();
}
[Key]
public int ANID{ get; set; }
public int q_ID{ get; set; }
public string Odgovor { get; set; }
public string kreator { get; set; }
public int? rCount { get; set; }
[ForeignKey("q_ID")]
public virtual Questions Questions{ get; set; }
public virtual ICollection<Results> Results{ get; set; }
模型结果:
public class Results
{
[Key]
public int RID{ get; set; }
public int ans_ID{ get; set; }
public int Result{ get; set; }
[ForeignKey("ans_ID")]
public virtual Answers Answers { get; set; }
}
【问题讨论】:
-
提示:不要将 EF 实体对象用作 ViewModel。
-
您使用实体框架调用
db.Questions,它将根据提供的ID构建问题实体。该实体是否有权获得答案? Entity Framework 是否真的构建了那个子对象? -
你能把你所有的模型都贴在这里吗?
-
这个问题远未完成,有很多方法可以做到这一点(MVC、MVVM 模式、存储库、UoW)我认为目前无法回答,而且可能永远不会很好,因为试图回答它会暴露代码在理解方面缺少其他主要缺陷的地方(EF 连接、联合、交叉应用、自动映射器......)
-
一些研究建议,实体框架很强大,但您定义了上下文,以便它可以映射到您的实体。但是前端或视图数据通常并不代表实体或数据聚合,因此您通常需要映射或扩展将数据转换为前端视图的方式。
标签: c# .net asp.net-mvc entity-framework model-view-controller