我已经创建了我的应用程序并使用了数据库优先方法。所以我使用 ADO.net 实体数据模型将我的数据库添加到项目中,然后以这种方式添加控制器,我认为我没有任何模型可以这么说?但无论如何,我已经添加了控制器,并且 CRUD 已自动添加到每个实体中。
我的问题是,我想在一个网页上查看许多表中的数据。我可以通过 sql 执行此操作,但如何使用 sql 提取我需要的数据并将其显示在屏幕上。
我已经创建了我的应用程序并使用了数据库优先方法。所以我使用 ADO.net 实体数据模型将我的数据库添加到项目中,然后以这种方式添加控制器,我认为我没有任何模型可以这么说?但无论如何,我已经添加了控制器,并且 CRUD 已自动添加到每个实体中。
我的问题是,我想在一个网页上查看许多表中的数据。我可以通过 sql 执行此操作,但如何使用 sql 提取我需要的数据并将其显示在屏幕上。
为了建立一点戴夫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
在您的视图顶部。
我假设您指的是创建实体模型的 EF Code First 方法。
如果我是对的,那么您与使用实体(表映射类)作为视图的模型的常见做法相冲突。
当我第一次搭建页面时,我经常使用实体作为模型。但正如您所发现的,它们很少适用,我经常发现自己迁移到更健壮的模型。
1)我建议您在模型目录中创建一个类库。嵌入使您的类中的多个实体成员。
例如,您可以拥有一个 CustomeActivityModel,它还具有客户、销售和订单的成员。
class CustomeActivityModel
{
Customers CustomerList { get; set; }
Sales SalesList { get; set; }
Orders OrdersList { get; set; }
}
在您的控制器中,您将填充它们
ViewResult Index()
{
CustomeActivityModel Model = new CustomeActivityModel();
Model.CustomerList EFContext.Customers;
Model.SalesList EFContext.Sales;
Model.OrdersList EFContext.Orders;
Return View(Model);
}
或者,您可以使用 EF 的 Linq 功能来包含具有关键关系的实体(假设销售具有客户和订单的外键)
ViewResult Index()
{
Model = EFContext.Sales.include("Customers").include("Orders");
Return View(Model);
}