分享免费的编程资源和教程

网站首页 > 技术教程 正文

Blazor小白笔记06-使用ef core增加查询数据

goqiw 2025-05-11 15:24:23 技术教程 4 ℃ 0 评论

先说一个问题,就是照着网站的例子有些demo就跑不起来,也不知道是哪里出错了,另外纠结于怎么保存修改后的数据,最笨的方法应该是遍历一下list<T>吧

新建一个类,实现实体类、数据库上下文等

以前定义实体类、数据库上下文都是分开写在不同的类里,为了方便做测试,这次就先写到一个类里。

using Microsoft.EntityFrameworkCore;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Threading.Tasks;

namespace Blazor.OnlyServer1.Models
{
    [Table("测试表")]
    public class Test1
    {
        [Key]
        public int Id { get; set; }
        public string? 名称 { get; set; }
        public string? 内容 { get; set; }
    }

    public class MyContext : DbContext  
    {
        public DbSet<Test1> Tests { get; set; }
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlServer("Server=Localhost;Database=xx;User Id=sa;Password=xxxxxxx;TrustServerCertificate=True");
        }
    }

    public class DataHelp 
    {
        /// <summary>
        /// 增加一条测试的数据
        /// </summary>
        public static async Task AddData() 
        {
            using (var context=new MyContext())
            {
                context.Add(new Test1 { 内容="测试数据",名称="新的名称" });
                await context.SaveChangesAsync();
            }
        }

        
    }
}

连接字符串中把数据库名称和密码换成自己真实的,然后在数据库中新建上一个表,就叫测试表吧。

关于中文表名的问题

数据库中是中文表名的话,两种解决方法:

方法1:在数据库上下文中定义DbSet时直接使用中文的表名,但是在后续使用时会一直用到,切换中文有些不方便

public DbSet<Test1> 测试表 { get; set; }

方法2:在定义实体类时通过table参数直接指定表名称,然后定义DbSet时用中文和英文都可以的。

[Table("测试表")]
    public class Test1
    {
        [Key]
        public int Id { get; set; }
        public string? 名称 { get; set; }
        public string? 内容 { get; set; }
    }

在组件中使用分页查询

先定义一个在组件中使用的list<T>对像T1

 private List<Test1> T1 = new List<Test1>();

然后在查询按钮下给它数据

public  async Task QueryData()
{
    using (var context = new MyContext())
    {
        T1 =  context.Tests.Skip(5).Take(5).ToList();
    }
}

在UI中增加一个按钮,点击时执行分页查询事件

<Button Text="查询数据" OnClick="QueryData"></Button>
<Button Text="分页数据" OnClick="QueryDataPage"></Button>
<Divider>表格测试</Divider>
<Table TItem="Test1" Items="@T1" IsPagination="true" PageItems="2"
       IsStriped="true" IsBordered="true"
       ShowToolbar="true" ShowDeleteButton="false"
       ClickToSelect="true" DoubleClickToEdit="true">
    <TableColumns>
        <TableColumn @bind-Field="@context.Id" Text="名称" Width="180" />
        <TableColumn @bind-Field="@context.内容" Text="小单位" />
        <TableColumn @bind-Field="@context.名称" Text="数据"/>
    </TableColumns>
</Table>

这里需要特别注意的一点是使用分页查询时,你的数据库一定要新,不能是SQL 2005之类的,不然EF core在生成分页代码时会直接出错,昨天分页时一直没数据,不知道什么原因,最后才发现是自动生成的分页SQL在低版本SQL Server中执行不了。

想要增加一条数据的话,也是增加一个按钮就行了,这里增加的是一条固定的数据

<Button Text="增加数据" OnClick="onAdd"></Button>
public async Task onAdd()
{
  //先增加一条数据,再查询显示出来
    DataHelp.AddData();
    QueryData();
}

就这吧,一会重装个新版的数据库

#冬日生活打卡季##职场##挑战30天在头条写日记#

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表