将数据从多个表/一个数据库传递到视图的最佳方法是什么?

时间:2014-07-28 14:09:09

标签: c# sql entity-framework asp.net-mvc-4

我遇到了一个奇怪的问题。我正在使用MVC 4,我试图从两个单独的表中提取数据以传递到我的视图中。通常我只是构建一个模型来处理这个,但是这两个表已经在其他模型中使用了,所以当我尝试创建一个 new 模型时,存在歧义问题

我想我的问题是:从数据库中的两个独立表中提取数据并将其放入视图的最佳方法是什么?出于某种原因,实体框架的整个概念对我来说有点混乱,所以也许我在这里错过了一些简单的东西。

此外,如果有人在任何地方可以阅读使用EF的一些非常全面的数据库交互,我真的很感激(虽然我想我可以谷歌那个)

2 个答案:

答案 0 :(得分:4)

最好的方法是创建一个ViewModel并在其中添加2个模型。

所以你需要创建类似

的东西
public class MyViewModel
{    
    public MyFirstEntity FirstEntity{ get; set; }
    public MySecondEntity SecondEntity{ get; set; }
}

在您的控制器中执行以下操作:

public ActionResult Index(int someparameter)
{
    MyFirstEntity firstEntity=
        BusinessLogic.GetMyFirstEntity(someparameter);
    MySecondEntity secondEntity=
        BusinessLogic.GetMySecondEntity(someparameter);

    MyViewModel myViewModel = new MyViewModel 
    {           
        FirstEntity = firstEntity,
        SecondEntity= secondEntity
    };

    return View(myViewModel);
}

此外,您可以查看this blog post以获取有关此事的更多信息。

答案 1 :(得分:2)

通常,您的视图模型只会传递视图所需的信息。如果正确实施,视图模型不应该知道或关心信息来自何处。

在您的情况下,您将根据两个表中的数据创建视图模型,而不是使用这两个表本身。

以下是您可以做的一个示例:

public ViewResult MyActionMethod()
{
    var tableOne = MyDataRepository.GetDataFromTableOne();
    var tableTwo = MyDataRepository.GetDataFromTableTwo();

    var model = new MyActionMethodModel()
    {
        Property1 = tableOne.Property1,
        Property2 = tableTwo.Property2,
    };

    return this.View(model);
}