首页 > 解决方案 > asp.net core EF 从另一个表中获取数据

问题描述

我有两个模型: Car.cs 和 SiteDefault.cs

public class Car
{
    public int CarId { get; set; }
    public string CarName { get; set; }
    public string Color { get; set; }
}

public class SiteDefault
{
    public int SiteDefaultId { get; set; }
    public string MainPageBackgroundImg { get; set; }
    public string AboutPageBackgroundImg { get; set; }
    public string ContactPageBackgroundImg { get; set; }
}

在 Views/Cars/Index.cshtml 中,我使用实体框架轻松列出汽车,并且我想从 SiteDefault 表中设置其背景图像文件名。

实际上,我需要动态更改网站的常规设置(背景、标题等)并轻松获取它们。应该有一个最佳实践

标签: asp.net-mvcentity-frameworkasp.net-core

解决方案


如果您需要将各种 EF 数据提取到视图中,您应该创建一个 ViewModel 来表示您需要的所有数据,而不是尝试将 EF 实体直接传递到视图中。您不能将视图绑定到多个模型,因此您不能将 Car 和 SiteDefault 模型作为两个不同的实体拉入。ViewModel 是一个保存这些数据的新类。如果您计划使用这两个模型中的大部分或全部数据,那么您可以创建一个仅包含这两个对象的 ViewModel:

public class CarsViewModel {
   public Car Car { get; set; }
   public SiteDefault SiteDefault { get; set; }
}

然后在您的 Cars 控制器中,使用 EF 提取数据并将这些对象分配给您的 ViewModel

var car = getCar() // EF
var siteDefault = getSiteDefault // more EF
var viewModel = new CarsViewModel() { Car = car, SiteDefault = siteDefault };
return View(viewModel);

在视图中,您只需将 @model 语句放在顶部并在视图中使用它,就像任何其他模型 (@Model.Car.CarName)

如果您只打算使用每个类中的几个字段,那么您可以只在 ViewModel 中创建这些字段,而不是分配整个对象。这取决于最适合这种情况的方法。


推荐阅读