如何在 mvc 3.0 EF 5 中加入两个模型并在视图中显示它们
Posted
技术标签:
【中文标题】如何在 mvc 3.0 EF 5 中加入两个模型并在视图中显示它们【英文标题】:How to join two model and display them in view in mvc 3.0 EF 5 【发布时间】:2016-04-15 10:40:54 【问题描述】:我有两个具有主键和外键概念的表。我想代表这些键获取组合数据。我不知道如何将两个表绑定到单个模型中并将其显示到视图中。
型号
public class TVSerialModel
public Int32 Serial_ID get; set; // primary key
public string Serial_Name get; set;
public int? Release_Year get; set;
public class TVSerialEpisodeModel
public Int64 Video_ID get; set;
public Int32 Serial_ID get; set; // foriegn key
public string Episode_Name get; set;
public string Description get; set;
public DateTime Uploaded_Time get; set;
public class TVSerial_Episode_VM
public IEnumerable<TVSerialEpisodeModel> tvserialEpisode get; set;
public IEnumerable<TVSerialModel> Tvserial get; set;
控制器
public ActionResult NewEpisodeReleased()
cDBContext tvContext = new cDBContext();
TVSerial_Episode_VM tves=new TVSerial_Episode_VM();
tves= tvContext.dbTvSerialEpisodes.
Join(tvContext.dbTvSerials, p => p.Serial_ID, r => r.Serial_ID,(p, r) => new p, r ).
Select(o => new TVSerial_Episode_VM
****what should i write here to get all columns from both table**** ).
Take(9).ToList();
return View(tves);
预期结果
【问题讨论】:
【参考方案1】:如果 TVSerialEpisode 有一个属性 TVSerial
,你可以通过你的外键点。
cDBContext.dbTvSerialEpisode
.Select(t =>
new
t.TVSerial.Serial_ID,
t.TVSerial.Serial_Name,
t.Episode_Name
)
.Take(9)
.ToList();
【讨论】:
【参考方案2】:您需要稍微改进与 EF 一起使用的模型。您必须在模型中包含参考对象。
像这样
public virtual TVSerialModel TVSerialModel get; set;
在主表中。这样你也可以选择引用的表。
【讨论】:
当您定义了与 virtual 关键字的关系时,Entity Framework 使用延迟加载。这意味着,相关对象在首次访问之前不会被加载。延迟加载听起来不错,但它会降低性能,因为有更多的数据库往返,如果你不小心,延迟加载会导致选择 N+1 问题。您可以通过关闭延迟加载来防止延迟加载并选择 N+1 个问题。 talksharp.com/increase-enity-framework-performance【参考方案3】:EF Include
public ActionResult NewEpisodeReleased()
cDBContext tvContext = new cDBContext();
TVSerial_Episode_VM tves=new TVSerial_Episode_VM();
tves= tvContext.dbTvSerialEpisodes.Include("TVSerialEpisodeModel")
.Include("TVSerialModel").ToList();
return View(tves);
【讨论】:
以上是关于如何在 mvc 3.0 EF 5 中加入两个模型并在视图中显示它们的主要内容,如果未能解决你的问题,请参考以下文章