如何在 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 中加入两个模型并在视图中显示它们的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Pandas 中加入 2 列词嵌入

如何在 symfony 5 中加入两个表?

在 Django 过滤器中加入两个模型

如何使用 MVC3 多对多关系和 EF4.1 模型优先检索数据?

如何在 Magento 2.3 中加入两个自定义表

3.MVC基础-Code First 入门完整实例