Blazor项目中使用EF读写 SQLite 数据库
《信管通低代码信息管理系统应用平台》开发环境就是Blazor,其中的数据库访问就是使用SQLite数据库。SQLite 是一种轻量级的嵌入式数据库,具有以下优点:
1. 轻量级
- 小巧易用:SQLite 只需要一个动态库或单个文件,库的大小通常不到 1 MB。
- 无需安装:SQLite 是嵌入式数据库,直接集成到应用程序中,无需额外安装或运行服务。
2. 单文件存储
- 简单管理:所有的数据、表结构、索引等信息都存储在一个单一的
.db
文件中,便于备份、传输和管理。 - 跨平台兼容:SQLite 数据库文件可以在不同操作系统之间无缝迁移。
3. 高性能
- 快速:在处理中小型数据量时,SQLite 的性能通常优于客户端-服务器模式的数据库。
- 嵌入式优化:SQLite 是为嵌入式设备设计的,能够高效运行在资源受限的环境中。
4. 易于使用
- 无需配置:不需要配置复杂的数据库服务器或客户端连接,直接使用数据库文件。
- SQL 支持:支持标准的 SQL 查询语句,易于学习和使用。
5. 开源和免费
- 零成本:SQLite 是开源软件,遵循 Public Domain 许可,无需任何费用即可商用。
- 广泛支持:有大量的社区支持和丰富的文档资源。
6. 事务支持
- ACID 合规:支持事务并保证原子性、一致性、隔离性和持久性,数据安全性强。
- 并发访问:支持多个读取操作和单个写入操作,适合大多数场景。
7. 跨平台
- 支持多种语言:SQLite 提供多种编程语言的绑定接口(如 C、C#、Python、Java 等)。
- 支持多种系统:运行于 Windows、Linux、macOS 和嵌入式系统等平台。
8. 适合嵌入式和小型项目
- 嵌入式设备:在 IoT 设备、手机、嵌入式系统中广泛使用。
- 小型应用:适用于单用户或小型项目,不需要复杂的数据库管理。
9. 文件系统友好
- 与文件操作兼容:SQLite 使用普通文件存储数据,可以很好地融入基于文件系统的应用程序设计。
- 容易与版本控制集成:可以将数据库文件直接纳入版本控制系统(如 Git)。
sqlite适用许多场景,如:嵌入式设备或移动应用(如 Android 使用 SQLite);小型网站或个人项目;快速原型开发和数据分析或临时数据存储等。
Blazor项目中使用Entity Framework (EF) Core读写SQLite数据库需要以下几个步骤:
1. 添加必要的依赖
在你的 Blazor 项目的 .csproj
文件中,添加以下包引用:
dotnet add package Microsoft.EntityFrameworkCore.Sqlite
dotnet add package Microsoft.EntityFrameworkCore.Design
2. 创建数据库上下文
定义一个继承自 DbContext
的类,用于表示 SQLite 数据库的上下文。
using Microsoft.EntityFrameworkCore;
public class AppDbContext : DbContext
{
public AppDbContext(DbContextOptions<AppDbContext> options)
: base(options) { }
// 定义你的数据表
public DbSet<TodoItem> TodoItems { get; set; }
}
public class TodoItem
{
public int Id { get; set; }
public string Title { get; set; }
public bool IsCompleted { get; set; }
}
3. 配置服务容器
在 Program.cs
文件中,配置依赖注入和数据库连接。
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
var builder = WebApplication.CreateBuilder(args); // 配置 SQLite 数据库
builder.Services.AddDbContext<AppDbContext>(options =>
options.UseSqlite("Data Source=app.db")); // 添加其他服务
builder.Services.AddRazorComponents();
builder.Services.AddServerSideBlazor();
var app = builder.Build(); // 创建数据库
using (var scope = app.Services.CreateScope())
{
var db = scope.ServiceProvider.GetRequiredService<AppDbContext>();
db.Database.EnsureCreated(); // 自动创建数据库,如果不存在
}
app.MapBlazorHub();
app.MapFallbackToPage("/_Host");
app.Run();
4. 在组件中使用数据库上下文
在 Blazor 组件中,使用依赖注入获取 AppDbContext
并进行数据库操作。
@inject AppDbContext DbContext
<h3>Todo List</h3>
<ul>
@foreach (var item in TodoItems)
{
<li>@item.Title (@(item.IsCompleted ? "Done" : "Pending"))</li>
}
</ul>
<input @bind="NewTodo" placeholder="Enter a new todo" />
<button @onclick="AddTodo">Add</button>
@code
{
private List<TodoItem> TodoItems = new();
private string NewTodo;
protected override async Task OnInitializedAsync()
{
// 加载数据
TodoItems = await DbContext.TodoItems.ToListAsync();
}
private async Task AddTodo()
{
if (!string.IsNullOrWhiteSpace(NewTodo))
{
var todo = new TodoItem
{ Title = NewTodo, IsCompleted = false };
DbContext.TodoItems.Add(todo);
await DbContext.SaveChangesAsync();
TodoItems.Add(todo);
NewTodo = string.Empty;
}
}
}
5. 运行项目并测试
- 运行你的 Blazor 项目,确保浏览器能访问到。
- SQLite 数据库文件 (
app.db
) 会自动生成在项目的运行目录。 - 通过组件界面添加或修改数据,观察效果。
注意事项
- 如果是 Blazor Server 项目,EF Core 的
DbContext
生命周期建议使用Scoped
模式(默认配置)。 - 如果是 Blazor WebAssembly 项目,EF Core 与 SQLite 的支持需要通过 WebAssembly 支持的库如
sqlite-wasm
,这可能需要额外配置。 - 对于大型项目,可以考虑使用迁移 (
dotnet ef migrations add InitialCreate
) 管理数据库结构。
《信管通低代码信息管理系统应用平台》是针对规模较小的桌面应用,它使用Blazor通过EF Core对sqlite进行数据管理,提高了开发效率,更方便开发好的应用发布和部署。