【问题标题】:How to join two model and display them in view in mvc 3.0 EF 5如何在 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);
}

预期结果

【问题讨论】:

    标签: entity-framework asp.net-mvc-3 model-view-controller


    【解决方案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);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-12-14
        • 1970-01-01
        • 2011-05-07
        • 1970-01-01
        • 1970-01-01
        • 2016-05-10
        • 2013-06-08
        相关资源
        最近更新 更多