Blazor Server 和 Entity Framework (EF) 读取 MySQL 数据

过程概述:

  1. 创建数据库上下文(DbContext):在 AppDbContext 类中定义与数据库表的映射,配置表的实体类(AlarmgcAlarmmfc)以及连接到 MySQL 数据库的配置。
  2. 配置数据库连接:在 Blazor 应用程序的 Startup.csProgram.cs 文件中配置数据库连接字符串并将 AppDbContext 注入到依赖注入容器。
  3. 创建实体类:为数据库中的每个表创建一个相应的实体类(AlarmgcAlarmmfc)。
  4. 编写 Blazor 页面代码:在 Blazor 页面中使用依赖注入注入 DbContext,然后使用 LINQ 查询读取数据库表的数据。
  5. 在 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.csStartup.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. 创建实体类(AlarmgcAlarmmfc

实体类代表数据库中的每一行记录。以下是示例实体类:

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 数据库中的数据并在页面上展示。

  • LoadAlarmgcDataLoadAlarmmfcData 方法会分别加载 alarmgcAlarmMfc 表的数据。
  • 查询结果会通过 selectedData 显示在 HTML 表格中。
  • 总结:

  • 数据库上下文(AppDbContext:在 AppDbContext 类中,使用 DbSet<T> 属性来表示数据库中的表,并配置表和实体之间的映射(例如,配置没有主键的表)。
  • 配置数据库连接:在 Program.csStartup.cs 中配置数据库连接字符串,并将 DbContext 注入到依赖注入容器。
  • Blazor 页面中读取数据:在 Blazor 页面中,通过注入 DbContext,并使用 ToListAsync 异步方法查询数据库表的数据,然后将数据展示在 UI 上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值