MVC 4,显示来自多个表的数据&视图中的关联作为列表

时间:2015-07-14 10:42:21

标签: c# entity-framework model-view-controller linq-to-sql linq-to-entities

无法从多个表中获取数据以在视图中显示,主要是因为其中一个是关联表。

您好我有这3个表及其列

Theat ID 描述

控制 ID 数 描述

ThreatHasControl 威胁ID 控制ID

我正在尝试创建一个视图,该视图将显示与所选威胁相关联的所有控件

因为使用关联表我不知道如何获取我需要的数据。我想我需要以某种方式加入这些表格。

我目前在我的存储库中有这个方法来获取ThreatHasControl表中的每个Item,它匹配为所选威胁传递的id

  public IQueryable<ThreatHasControl> ThreatHasControl(int ThreatID)
    {
        _context = new RiskAssessmentApplicationEntities();  
        IQueryable<ThreatHasControl> ThreatControl = _context.ThreatHasControl.Where(t => t.ThreatID == ThreatID);
        return ThreatControl;
    }

猜测它在这里我需要做点别的事。

我也有这个作为我的控制器

public ActionResult GetThreatControls(int ThreatID)
        {
            repository = new EFThreatRepository();
            ViewModel MyModel = new ViewModel();
            MyModel.ThreatHasControl = repository.ThreatHasControl(ThreatID);
            List<ViewModel> ViewModelList = new List<ViewModel>();
            ViewModelList.Add(MyModel);
            return View(ViewModelList);
        }

有人可以提供一些建议吗?提前谢谢

2 个答案:

答案 0 :(得分:0)

你尝试使用ViewBag吗?

http://www.codeproject.com/Articles/476967/WhatplusisplusViewData-2cplusViewBagplusandplusTem

它可以容纳任何物体......

你是否在你的观点中设定了:

@model System.Collections.Generic.List<ViewModel>

在页面顶部?并将其用作常规清单?

foreach(var ViewModel in Model) 
{
 ....
}

答案 1 :(得分:0)

我应该为我的问题制定解决方案。

事实证明我只需要增强linq查询导航路径,以便选择并包含所需的表/数据

我暂时从存储库中删除了该方法,以便更容易理解

GetThreatControls操作方法

 public ActionResult GetThreatControls(int ThreatID)
        {
            RiskAssessmentApplicationEntities _DBContext = new RiskAssessmentApplicationEntities();
            ThreatHasControl ViewModel = new ThreatHasControl();
            ViewModel.Threat = _DBContext.Threats.Single(x => x.ID == ThreatID);
            ViewModel.Controls = _DBContext
                                        .ThreatHasControl
                                        .Include("ThreatHasControl.Control")
                                        .Where(x => x.ThreatID == ThreatID)
                                        .Select(x => x.Control);

            return View(ViewModel);                                   
        }