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. 运行项目并测试

  1. 运行你的 Blazor 项目,确保浏览器能访问到。
  2. SQLite 数据库文件 (app.db) 会自动生成在项目的运行目录。
  3. 通过组件界面添加或修改数据,观察效果。

注意事项

  1. 如果是 Blazor Server 项目,EF Core 的 DbContext 生命周期建议使用 Scoped 模式(默认配置)。
  2. 如果是 Blazor WebAssembly 项目,EF Core 与 SQLite 的支持需要通过 WebAssembly 支持的库如 sqlite-wasm,这可能需要额外配置。
  3. 对于大型项目,可以考虑使用迁移 (dotnet ef migrations add InitialCreate) 管理数据库结构。

信管通低代码信息管理系统应用平台》是针对规模较小的桌面应用,它使用Blazor通过EF Core对sqlite进行数据管理,提高了开发效率,更方便开发好的应用发布和部署。

相关推荐
dazhong2012几秒前
PLSQL 客户端连接 Oracle 数据库配置
数据库·oracle
IT规划师30 分钟前
Visual Studio - API调试与测试工具之HTTP文件
visual studio·http文件
gywl1 小时前
openEuler VM虚拟机操作(期末考试)
linux·服务器·网络·windows·http·centos
了一li2 小时前
Qt中的QProcess与Boost.Interprocess:实现多进程编程
服务器·数据库·qt
Java Fans2 小时前
C# 中串口读取问题及解决方案
开发语言·c#
日记跟新中2 小时前
Ubuntu20.04 修改root密码
linux·运维·服务器
盛派网络小助手2 小时前
微信 SDK 更新 Sample,NCF 文档和模板更新,更多更新日志,欢迎解锁
开发语言·人工智能·后端·架构·c#
码农君莫笑3 小时前
信管通低代码信息管理系统应用平台
linux·数据库·windows·低代码·c#·.net·visual studio
BUG 4043 小时前
Linux——Shell
linux·运维·服务器
别致的影分身3 小时前
使用C语言连接MySQL
数据库·mysql