使用SQL从多个表中提取数据并在一个视图中显示它

时间:2013-01-17 23:49:28

标签: c# sql asp.net-mvc ado.net crud

我已经创建了我的应用程序并使用数据库第一种方法。所以我使用ADO.net实体数据模型将我的数据库添加到项目中,然后以这种方式添加控制器,我认为没有任何模型可以这么说?但无论如何,我已经添加了控制器,并且CRUD自动添加到每个实体。

我的问题是,我想在一个网页上查看来自多个表的数据。我可以通过sql来做到这一点但是如何使用sql来提取我需要的数据并将其显示在屏幕上。

2 个答案:

答案 0 :(得分:1)

在Dave A的答案上建立一点:

我个人喜欢用数据库优先EF进行这种类型的检索。

在构建EDMX之后,创建一个简单,直接的POCO,模仿您想要返回的内容。一个简单的例子是:

public class ComplexModelFromMultipleTables
{
   List<Car> Cars { get; set; }
   List<Bike> Bikes { get; set; }
   List<Boat> Boats { get; set; }
}

在您的EDMX中反映出数据库中的关系后,可以通过您喜欢的模式在提供商中访问它。一个简单的使用模式总是好的,虽然我用映射器构建了更复杂的对象。

public ComplexModelFromMultipleTables GetObject
using (var db = new DBContext())
{
    var model = new ComplexModelFromMultipleTables
    {
        Cars = db.Cars.Where(x => x.CarType == whateveryouwant).ToList(),
        Bikes = db.Bikes.Where(x => x.anotherproperty == whateveryouwant).ToList(),
        Boats = db.Boats.Where(x => x.something else == whateveryouwant).ToList(),
    }
    return model;
}

从您的控制器调用此提供程序,并使用

强烈键入视图
@model ComplexModelFromMultipleTables

位于您的视图顶部。

答案 1 :(得分:0)

我假设您指的是创建实体模型的EF Code First方法。

如果我是对的,那么使用实体(表映射类)作为视图模型的常见做法会产生冲突。

当我第一次搭建页面时,我经常使用实体作为模型。但正如你所发现的那样,它们很少适用,我经常会发现自己正在迁移到更强大的模型。

1)我建议您在Models目录中创建一个类库。嵌入使您的班级中的几个实体成员。

例如,您可以拥有一个CustomeActivityModel,它也具有Customers,Sales和Orders的成员。

class CustomeActivityModel
{
      Customers CustomerList { get; set; }
      Sales SalesList { get; set; }
      Orders OrdersList { get; set; }
}
在你的Controller中,你会填充它们

   ViewResult Index()
{
   CustomeActivityModel Model = new CustomeActivityModel();
   Model.CustomerList EFContext.Customers;
   Model.SalesList EFContext.Sales;
   Model.OrdersList EFContext.Orders;
   Return View(Model);
}

或者,您可以使用EF的Linq功能来包含具有关键关系的实体(假设Sales具有客户和订单的外键)

   ViewResult Index()
{
   Model = EFContext.Sales.include("Customers").include("Orders");
   Return View(Model);
}