ASP.NET Core MVC中使用EF向视图传递两张无关联表的数据
在ASP.NET Core MVC中通过EF传递两张无关联表数据到视图
1. 创建实体类
对应数据库中的两张表,定义与表字段匹配的实体:
public class Product { public int products_id { get; set; } public string products_name { get; set; } } public class Category { public int categories_id { get; set; } public string categories_name { get; set; } }
2. 配置DbContext
将两个实体注册到EF的DbContext中,让EF识别对应的数据库表:
public class AppDbContext : DbContext { public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { } public DbSet<Product> products { get; set; } public DbSet<Category> categories { get; set; } }
同时在Program.cs中注册DbContext(以SQL Server为例):
builder.Services.AddDbContext<AppDbContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));
3. 定义ViewModel
由于需要同时传递两个表的数据,创建ViewModel封装两个集合:
public class ProductCategoryViewModel { public IEnumerable<Product> Products { get; set; } public IEnumerable<Category> Categories { get; set; } }
4. 控制器查询并传递数据
在控制器中注入DbContext,查询两张表的全部数据,封装到ViewModel后传递给视图:
public class HomeController : Controller { private readonly AppDbContext _context; public HomeController(AppDbContext context) { _context = context; } public IActionResult Index() { var viewModel = new ProductCategoryViewModel { Products = _context.products.ToList(), Categories = _context.categories.ToList() }; return View(viewModel); } }
5. 视图展示数据
在对应视图(如Index.cshtml)中指定ViewModel类型,遍历展示数据:
@model ProductCategoryViewModel <h2>产品列表</h2> <ul> @foreach (var product in Model.Products) { <li>@product.products_id - @product.products_name</li> } </ul> <h2>分类列表</h2> <ul> @foreach (var category in Model.Categories) { <li>@category.categories_id - @category.categories_name</li> } </ul>
内容的提问来源于stack exchange,提问作者محمد حسین مظفری
相关产品推荐
相关产品推荐

