基于Blazor Server+EF Core+Bootstratp Blazor 进行的基本增删改查
本次使用Vs2022+.net 6
一、创建项目使用Blazor Server

二、引用以下的安装包
BootstrapBlazor Microsoft.EntityFrameworkCore Microsoft.EntityFrameworkCore.SqlServer Microsoft.EntityFrameworkCore.Toolss
三、创建一个Model类
[Table("SKModel")]
public class SKModel
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public string Address { get; set; }
}
四、创建一个DBContext
public class DbContext:DbContext
{
public DbContext(DbContextOptions options) : base(options)
{
}
public DbSet<SKModel> SKModels { get; set; }
}
五、在Program.cs中进行注入
//把BootstrapBlazor注入了
builder.Services.AddBootstrapBlazor();
//上下文注入
builder.Services.AddDbContextFactory<DbContext>(opt =>
//链接数据库
opt.UseSqlServer($"Data Source=.;Initial Catalog=SKBlazor;User ID=sa;Password=123456"));
六、进行迁移

先在控制台执行 进行创建数据库
Add-Migration SQL1
成功后在执行
update-database newSQL
七、在_Imports.razor引用
@using BootstrapBlazor.Components
八、在Pages中_Layout.cshtml里进行替换

<!-- 需引用 BootstrapBlazor.FontAwesome 包 !-->
<link href="_content/BootstrapBlazor.FontAwesome/css/font-awesome.min.css" rel="stylesheet">
<link href="_content/BootstrapBlazor/css/bootstrap.blazor.bundle.min.css" rel="stylesheet">

@*新添加的*@
<script src="_content/BootstrapBlazor/js/bootstrap.blazor.bundle.min.js"></script>
九、在Pages文件夹下增加User.razor文件
@page "/user"
@using BlazorSKP.Model
@using Microsoft.EntityFrameworkCore;
@using BlazorSKP.Dal
@implements IDisposable
@inject IDbContextFactory<DbContext> DbFactory
<Table TItem="SKModel"
IsPagination="true"
IsStriped="true" IsBordered="true" IsMultipleSelect="true"
ShowToolbar="true" ShowExtendButtons="true" ShowSkeleton="true"
OnQueryAsync="@OnEditQueryAsync" OnResetSearchAsync="@OnResetSearchAsync"
OnAddAsync="@OnAddAsync" OnSaveAsync="@OnSaveAsync" OnDeleteAsync="@OnDeleteAsync">
<TableColumns>
<TableColumn @bind-Field="@context.Id" Width="180" />
<TableColumn @bind-Field="@context.Name" Sortable="true" Filterable="true" Text="名称" />
<TableColumn @bind-Field="@context.Age" Text="年龄" />
<TableColumn @bind-Field="@context.Address" Text="地址" />
</TableColumns>
<EditTemplate>
<div class="form-inline">
<div class="row">
<div class="form-group col-12 col-sm-6">
<BootstrapInput @bind-Value="@context.Name" placeholder="不可为空,50字以内" maxlength="50">
<RequiredValidator />
<StringLengthValidator Length="50" />
</BootstrapInput>
</div>
<div class="form-group col-12 col-sm-6">
<BootstrapInput @bind-Value="@context.Age" placeholder="不可为空,50字以内" maxlength="50">
<RequiredValidator />
<StringLengthValidator Length="50" />
</BootstrapInput>
</div>
<div class="form-group col-12 col-sm-6">
<BootstrapInput @bind-Value="@context.Address" placeholder="不可为空,50字以内" maxlength="50">
<RequiredValidator />
<StringLengthValidator Length="50" />
</BootstrapInput>
</div>
</div>
</div>
</EditTemplate>
</Table>
@code {
private DbContext Context { get; set; }
//这里相当于是构造方法
protected override async Task OnInitializedAsync()
{
Context = DbFactory.CreateDbContext();
await base.OnInitializedAsync();
}
protected async Task<SKModel> OnAddAsync()
{
return await Task.FromResult(new SKModel());
}
protected async Task<bool> OnSaveAsync(SKModel item, ItemChangedType type)
{
if(type==ItemChangedType.Add)
{
//数据保存
await Context.AddAsync(item);
await Context.SaveChangesAsync();
return await Task.FromResult(true);
}
else{
//数据更新
var f = Context.SKModels.OfType<SKModel>().FirstOrDefault(i => i.Id == item.Id);
if(f!=null)
{
f.Name = item.Name;
f.Age = item.Age;
f.PhoneNum = item.PhoneNum;
}
await Context.SaveChangesAsync();
}
return await Task.FromResult(true);
}
//删除
protected async Task<bool> OnDeleteAsync(IEnumerable<SKModel> items)
{
items.ToList().ForEach(i => Context.SKModels.Remove(i));
await Context.SaveChangesAsync();
return await Task.FromResult(true);
}
//数据显示
protected async Task<QueryData<SKModel>> OnEditQueryAsync(QueryPageOptions options)
{
var query = Context.SKModels;
var ret = new QueryData<SKModel>()
{
TotalCount = query.Count(),
Items = query
};
return await Task.FromResult(ret);
}
protected Task OnResetSearchAsync(SKModel item)
{
item.Name = "";
item.Address = "";
return Task.CompletedTask;
}
//释放上下文
public void Dispose()
{
Context.Dispose();
}
}
十、在NavMenu.razor里配置路由

十一、运行起来就完成了增删改查的基本操作

最开始学的时候借鉴了这位大佬的:https://www.cnblogs.com/kismet82/p/14321674.html
这是演示平台地址:https://www.blazor.zone/introduction
有问题的话请留言
待续......

浙公网安备 33010602011771号