Entity framework 如何在mvc 3.0 EF 5中连接两个模型并在视图中显示它们

Entity framework 如何在mvc 3.0 EF 5中连接两个模型并在视图中显示它们,entity-framework,asp.net-mvc-3,model-view-controller,Entity Framework,Asp.net Mvc 3,Model View Controller,我有两个表,它们有主键和外键概念。我想代表这些键获取组合数据。我不知道如何将这两个表绑定到单个模型中,并将其显示到视图中 型号 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 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; }
}
预期结果


如果TVSerialSpice有一个属性
TVSerial
,您可以通过外键点选

cDBContext.dbTvSerialEpisode
    .Select(t => 
        new {
            t.TVSerial.Serial_ID, 
            t.TVSerial.Serial_Name, 
            t.Episode_Name
        })
    .Take(9)
    .ToList();

您需要对EF使用的模型稍加改进。必须在模型中包含引用对象

像这样

public virtual TVSerialModel TVSerialModel { get; set; } 
在主表中。这样,您也可以选择参考表。


当您定义了与virtual关键字的关系时,实体框架使用延迟加载。这意味着,在首次访问相关对象之前,不会加载它们。延迟加载听起来不错,但它会降低性能,因为有更多的往返数据库,如果不小心,延迟加载可能会导致选择N+1问题。您可以通过关闭延迟加载来防止延迟加载并选择N+1问题。
public virtual TVSerialModel TVSerialModel { get; set; } 
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);
}