过程概述:
- 创建数据库上下文(DbContext):在
AppDbContext
类中定义与数据库表的映射,配置表的实体类(Alarmgc
和Alarmmfc
)以及连接到 MySQL 数据库的配置。 - 配置数据库连接:在 Blazor 应用程序的
Startup.cs
或Program.cs
文件中配置数据库连接字符串并将AppDbContext
注入到依赖注入容器。 - 创建实体类:为数据库中的每个表创建一个相应的实体类(
Alarmgc
和Alarmmfc
)。 - 编写 Blazor 页面代码:在 Blazor 页面中使用依赖注入注入
DbContext
,然后使用 LINQ 查询读取数据库表的数据。 - 在 UI 中展示数据:通过异步方法读取数据并展示在 Blazor 页面中。
1. 配置 AppDbContext
(数据库上下文类)
using Microsoft.EntityFrameworkCore;
using 测试.Data;
namespace 测试.Data;
public class AppDbContext : DbContext
{
public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { }
// DbSet 属性用于映射数据库中的表
public DbSet<Alarmgc> alarmgc { get; set; }
public DbSet<Alarmmfc> AlarmMfc { get; set; }
// 配置实体与数据库的映射
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
// 如果没有主键,配置实体没有主键
modelBuilder.Entity<Alarmgc>().HasNoKey();
modelBuilder.Entity<Alarmmfc>().HasNoKey();
}
}
2. 配置数据库连接
在 Program.cs
或 Startup.cs
文件中配置数据库连接字符串,并将 AppDbContext
注入到依赖注入容器中。
using Microsoft.EntityFrameworkCore;
using 测试.Data;
var builder = WebApplication.CreateBuilder(args);
// 配置 MySQL 连接字符串
builder.Services.AddDbContext<AppDbContext>(options =>
options.UseMySql(builder.Configuration.GetConnectionString("DefaultConnection"),
ServerVersion.AutoDetect(builder.Configuration.GetConnectionString("DefaultConnection"))));
var app = builder.Build();
3. 创建实体类(Alarmgc
和 Alarmmfc
)
实体类代表数据库中的每一行记录。以下是示例实体类:
using System;
namespace 测试.Data;
public class Alarmgc
{
public DateTime A_Time { get; set; }
public int A_Num { get; set; }
}
public class Alarmmfc
{
public DateTime A_Time { get; set; }
public int A_Num { get; set; }
}
4. Blazor 页面代码
在 Blazor 页面中,使用 @inject
注入 AppDbContext
,并通过异步方法读取 MySQL 数据。
@page "/"
@using Microsoft.EntityFrameworkCore;
@using 测试.Data; // 导入 AppDbContext 的命名空间
@inject 测试.Data.AppDbContext DbContext
<h3>Table Data</h3>
<button class="btn btn-primary" @onclick="LoadAlarmgcData">Load Alarmgc Data</button>
<button class="btn btn-secondary" @onclick="LoadAlarmmfcData">Load Alarmmfc Data</button>
<div>
@if (selectedData == null)
{
<p>Click a button to load data.</p>
}
else if (selectedData.Count == 0)
{
<p>No data found.</p>
}
else
{
<table class="table">
<thead>
<tr>
<th>Time</th>
<th>Number</th>
</tr>
</thead>
<tbody>
@foreach (var row in selectedData)
{
<tr>
<td>@row.A_Time</td>
<td>@row.A_Num</td>
</tr>
}
</tbody>
</table>
}
</div>
@code {
private List<dynamic>? selectedData;
// 加载 alarmgc 表数据
private async Task LoadAlarmgcData()
{
// 使用 DbContext 从数据库中查询 alarmgc 表数据
var alarms = await DbContext.alarmgc.ToListAsync();
// 映射数据,选择需要显示的字段
selectedData = alarms.Select(a => new { a.A_Time, a.A_Num }).Cast<dynamic>().ToList();
}
// 加载 alarmmfc 表数据
private async Task LoadAlarmmfcData()
{
// 使用 DbContext 从数据库中查询 AlarmMfc 表数据
var alarmsMfc = await DbContext.AlarmMfc.ToListAsync();
// 映射数据,选择需要显示的字段
selectedData = alarmsMfc.Select(a => new { a.A_Time, a.A_Num }).Cast<dynamic>().ToList();
}
}
5. 展示数据
在 Blazor 页面中,点击按钮会异步加载数据库中的数据并显示在表格中。
通过上述步骤,Blazor Server 应用程序通过 Entity Framework (EF) 成功读取 MySQL 数据库中的数据并在页面上展示。
LoadAlarmgcData
和LoadAlarmmfcData
方法会分别加载alarmgc
和AlarmMfc
表的数据。- 查询结果会通过
selectedData
显示在 HTML 表格中。 -
总结:
- 数据库上下文(
AppDbContext
):在AppDbContext
类中,使用DbSet<T>
属性来表示数据库中的表,并配置表和实体之间的映射(例如,配置没有主键的表)。 - 配置数据库连接:在
Program.cs
或Startup.cs
中配置数据库连接字符串,并将DbContext
注入到依赖注入容器。 - Blazor 页面中读取数据:在 Blazor 页面中,通过注入
DbContext
,并使用ToListAsync
异步方法查询数据库表的数据,然后将数据展示在 UI 上。