先说一个问题,就是照着网站的例子有些demo就跑不起来,也不知道是哪里出错了,另外纠结于怎么保存修改后的数据,最笨的方法应该是遍历一下list
新建一个类,实现实体类、数据库上下文等
以前定义实体类、数据库上下文都是分开写在不同的类里,为了方便做测试,这次就先写到一个类里。
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 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
{
///
/// 增加一条测试的数据
///
public static async Task AddData()
{
using (var context=new MyContext())
{
context.Add(new Test1 { 内容="测试数据",名称="新的名称" });
await context.SaveChangesAsync();
}
}
}
}
连接字符串中把数据库名称和密码换成自己真实的,然后在数据库中新建上一个表,就叫测试表吧。
关于中文表名的问题
数据库中是中文表名的话,两种解决方法:
方法1:在数据库上下文中定义DbSet时直接使用中文的表名,但是在后续使用时会一直用到,切换中文有些不方便
public DbSet 测试表 { get; set; }
方法2:在定义实体类时通过table参数直接指定表名称,然后定义DbSet时用中文和英文都可以的。
[Table("测试表")]
public class Test1
{
[Key]
public int Id { get; set; }
public string? 名称 { get; set; }
public string? 内容 { get; set; }
}
在组件中使用分页查询
先定义一个在组件中使用的list
private List T1 = new List();
然后在查询按钮下给它数据
public async Task QueryData()
{
using (var context = new MyContext())
{
T1 = context.Tests.Skip(5).Take(5).ToList();
}
}
在UI中增加一个按钮,点击时执行分页查询事件
表格测试
这里需要特别注意的一点是使用分页查询时,你的数据库一定要新,不能是SQL 2005之类的,不然EF core在生成分页代码时会直接出错,昨天分页时一直没数据,不知道什么原因,最后才发现是自动生成的分页SQL在低版本SQL Server中执行不了。
想要增加一条数据的话,也是增加一个按钮就行了,这里增加的是一条固定的数据
public async Task onAdd()
{
//先增加一条数据,再查询显示出来
DataHelp.AddData();
QueryData();
}
就这吧,一会重装个新版的数据库