导读:本期聚焦于小伙伴创作的《C# Avalonia如何集成Entity Framework Core实现数据持久化》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《C# Avalonia如何集成Entity Framework Core实现数据持久化》有用,将其分享出去将是对创作者最好的鼓励。

在C#跨平台桌面应用开发中,Avalonia是常用的UI框架,Entity Framework Core则是高效的ORM工具,将两者结合可以实现应用的本地数据持久化需求,无需额外搭建后端服务就能完成数据的增删改查操作。

C# Avalonia如何集成Entity Framework Core实现数据持久化

环境准备与依赖安装

首先需要创建一个Avalonia应用项目,如果你已经存在现有项目可以直接使用。打开NuGet包管理器,安装以下两个核心依赖包:

  • Microsoft.EntityFrameworkCore.Sqlite:用于SQLite数据库支持,适合桌面应用本地存储场景
  • Microsoft.EntityFrameworkCore.Tools:用于执行数据库迁移相关命令

安装完成后,项目的依赖项会自动配置完成,无需额外修改项目文件的基础配置。

定义实体模型与数据库上下文

接下来需要定义业务对应的实体类,以及继承DbContext的数据库上下文类,这是EF Core操作数据库的核心部分。

实体类定义

假设我们要实现一个简单的用户管理功能,先定义User实体类:

using System.ComponentModel.DataAnnotations;

namespace AvaloniaEfDemo.Models
{
    public class User
    {
        [Key]
        public int Id { get; set; }

        [Required]
        [MaxLength(50)]
        public string UserName { get; set; }

        [Required]
        [MaxLength(100)]
        public string Email { get; set; }

        public DateTime CreateTime { get; set; } = DateTime.Now;
    }
}

数据库上下文定义

创建AppDbContext类,继承DbContext并配置数据库连接和实体集合:

using Microsoft.EntityFrameworkCore;
using AvaloniaEfDemo.Models;

namespace AvaloniaEfDemo.Data
{
    public class AppDbContext : DbContext
    {
        public DbSet<User> Users { get; set; }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            // 配置SQLite数据库连接,数据库文件会生成在项目运行目录下
            optionsBuilder.UseSqlite("Data Source=app.db");
        }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            // 可选:配置实体的额外规则,比如设置表名、字段约束等
            modelBuilder.Entity<User>().ToTable("Users");
        }
    }
}

执行数据库迁移

定义完上下文后,需要通过EF Core的迁移命令生成数据库结构。打开程序包管理器控制台,依次执行以下命令:

# 添加迁移记录,InitialCreate是迁移名称,可以自定义
Add-Migration InitialCreate

# 将迁移应用到数据库,生成实际的db文件
Update-Database

执行完成后,项目的运行目录下会出现app.db的SQLite数据库文件,表结构会按照我们定义的实体类自动生成。

在Avalonia中使用EF Core操作数据

接下来在Avalonia的ViewModel层或者Service层封装数据操作方法,然后在界面中调用这些方法完成数据交互。

封装数据服务

创建UserService类,封装用户的增删改查操作:

using AvaloniaEfDemo.Data;
using AvaloniaEfDemo.Models;
using System.Collections.Generic;
using System.Linq;

namespace AvaloniaEfDemo.Services
{
    public class UserService
    {
        // 添加用户
        public void AddUser(User user)
        {
            using (var db = new AppDbContext())
            {
                db.Users.Add(user);
                db.SaveChanges();
            }
        }

        // 获取所有用户
        public List<User> GetAllUsers()
        {
            using (var db = new AppDbContext())
            {
                return db.Users.ToList();
            }
        }

        // 根据Id删除用户
        public void DeleteUser(int id)
        {
            using (var db = new AppDbContext())
            {
                var user = db.Users.FirstOrDefault(u => u.Id == id);
                if (user != null)
                {
                    db.Users.Remove(user);
                    db.SaveChanges();
                }
            }
        }
    }
}

界面数据绑定示例

在Avalonia的窗口中,我们可以通过按钮点击事件调用服务方法,然后将数据绑定到列表控件上。以下是一个简单的界面交互代码示例:

using Avalonia.Controls;
using AvaloniaEfDemo.Services;
using AvaloniaEfDemo.Models;
using System.Collections.ObjectModel;
using System.Linq;

namespace AvaloniaEfDemo.Views
{
    public partial class MainWindow : Window
    {
        private ObservableCollection<User> _userList = new ObservableCollection<User>();
        private UserService _userService = new UserService();

        public MainWindow()
        {
            InitializeComponent();
            // 初始化加载用户数据
            LoadUsers();
            // 假设界面有一个名为UserListView的ListBox控件
            UserListView.ItemsSource = _userList;
        }

        private void LoadUsers()
        {
            var users = _userService.GetAllUsers();
            _userList.Clear();
            foreach (var user in users)
            {
                _userList.Add(user);
            }
        }

        // 添加用户按钮点击事件
        private void OnAddUserClick(object sender, Avalonia.Interactivity.RoutedEventArgs e)
        {
            var newUser = new User
            {
                UserName = "测试用户",
                Email = "test@ipipp.com"
            };
            _userService.AddUser(newUser);
            LoadUsers();
        }

        // 删除用户按钮点击事件
        private void OnDeleteUserClick(object sender, Avalonia.Interactivity.RoutedEventArgs e)
        {
            if (UserListView.SelectedItem is User selectedUser)
            {
                _userService.DeleteUser(selectedUser.Id);
                LoadUsers();
            }
        }
    }
}

注意事项

  • DbContext是轻量级对象,建议每次操作数据时创建新的实例,使用using语句确保资源释放,避免数据库连接占用问题
  • 如果应用需要支持多用户同时操作,需要额外配置数据库并发控制,SQLite默认是单连接写入,多写入场景需要加锁处理
  • 迁移命令执行时如果遇到上下文找不到的问题,需要确认AppDbContext的命名空间是否正确,或者手动指定迁移的上下文类型
  • 生产环境中不建议将数据库连接字符串硬编码,可以通过配置文件读取,方便后续修改数据库路径或者切换数据库类型

通过以上步骤,就可以完成Avalonia和Entity Framework Core的集成,实现桌面应用的本地数据持久化功能,后续可以根据业务需求扩展更多实体和操作方法。

C#AvaloniaEntity_Framework_Core数据持久化修改时间:2026-06-21 06:06:33

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。