WPF 结合 MVVM模式下SqlSugar ORM框架的使用

WPF 结合 MVVM模式以及 SQLSugar 是一个强大的应用程序架构,可以用来创建具有良好分层和可维护性的应用程序。以下是一个简单的指导,介绍如何在 WPF MVVM 中使用 SQLSugar 访问 MySQL 数据库。

使用 WPF MVVM 框架结合 MySQL 数据库和 SqlSugar ORM 工具的详细步骤:

1、首先需要安装 SqlSugar 和 MySql.Data 两个 NuGet 包。打开 Visual Studio,右键点击项目 -> NuGet 包管理器 -> 管理解决方案的 NuGet 包,然后搜索 SqlSugar 和 MySql.Data,并安装它们。

2、创建一个名为 Models 的文件夹,在这个文件夹里创建一个名为 DatabaseContext.cs 的类,这个类用于连接到你的 MySQL 数据库。代码如下:

csharp 复制代码
using System;
using SqlSugar;

namespace [your project name].Models
{
    public class DatabaseContext
    {
        private static readonly Lazy<SqlSugarClient> _db = new Lazy<SqlSugarClient>(() =>
        {
            var db = new SqlSugarClient(new ConnectionConfig()
            {
               //参ConnectionString 根据自己项目需求组合
                ConnectionString = "your connection string",
                //ConnectionString = string.Format("server={0};uid={1};pwd={2};database={3}", server, id, pwd, database),
                DbType = DbType.MySql,
                InitKeyType = InitKeyType.Attribute,
                IsAutoCloseConnection = true
            });
            // 设置 SqlSugar 日志记录
            db.Aop.OnLogExecuted = (sql, pars) =>
            {
                Console.WriteLine(sql + "\r\n" +
                                  db.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value)));
            };
            db.Aop.OnError = (exp) => Console.WriteLine(exp.Message);
            return db;
        });

        public static SqlSugarClient Db => _db.Value;
    }
}

其中,ConnectionString 的值应该替换成你的 MySQL 数据库连接字符串。

3、接下来创建一个名为 UserRepository 的类,这个类用于执行用户相关的操作,比如增删改查等。代码如下:

csharp 复制代码
using System.Collections.Generic;
using [your project name].Models;

namespace [your project name].Repositories
{
    public class UserRepository
    {
        public List<User> GetAll()
        {
            return DatabaseContext.Db.Queryable<User>().ToList();
        }

        public void Insert(User user)
        {
            DatabaseContext.Db.Insertable(user).ExecuteCommand();
        }

        public void Update(User user)
        {
            DatabaseContext.Db.Updateable(user).ExecuteCommand();
        }

        public void Delete(User user)
        {
            DatabaseContext.Db.Deleteable(user).ExecuteCommand();
        }
    }
}

其中,User 是你自己定义的实体类,它应该对应着数据库中的一张表。

4、在 ViewModel 中使用 UserRepository 执行数据库操作。可以在 ViewModel 的构造函数中初始化 UserRepository,然后在需要使用时调用它的方法。例如:

csharp 复制代码
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Windows.Input;
using [your project name].Models;
using [your project name].Repositories;
using GalaSoft.MvvmLight;
using GalaSoft.MvvmLight.Command;

namespace [your project name].ViewModels
{
    public class MainViewModel : ViewModelBase
    {
        private readonly UserRepository _userRepository = new UserRepository();

        private ObservableCollection<User> _users;

        public ObservableCollection<User> Users
        {
            get => _users;
            set => Set(ref _users, value);
        }

        public ICommand LoadUsersCommand { get; }

        public MainViewModel()
        {
            LoadUsersCommand = new RelayCommand(LoadUsers);

            if (IsInDesignMode)
            {
                // 在设计模式下,添加一些虚拟数据以便在 Visual Studio 中预览界面
                Users = new ObservableCollection<User>()
                {
                    new User() {Id = 1, Name = "张三", Age = 20},
                    new User() {Id = 2, Name = "李四", Age = 25},
                    new User() {Id = 3, Name = "王五", Age = 30},
                };
            }
        }

        private void LoadUsers()
        {
            var users = _userRepository.GetAll();
            Users = new ObservableCollection<User>(users);
        }
    }
}

在 LoadUsers 方法中调用 UserRepository 的 GetAll 方法来获取所有用户,然后把它们转换成 ObservableCollection 给 Users 属性赋值即可。

5、最后,在界面中绑定 ViewModel 的属性和命令。例如:

csharp 复制代码
<Window x:Class="[your project name].MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:viewModels="[your project name].ViewModels"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Window.DataContext>
        <viewModels:MainViewModel />
    </Window.DataContext>
    <Grid>
        <DataGrid ItemsSource="{Binding Users}" AutoGenerateColumns="False">
            <DataGrid.Columns>
                <DataGridTextColumn Header="ID" Binding="{Binding Id}" />
                <DataGridTextColumn Header="Name" Binding="{Binding Name}" />
                <DataGridTextColumn Header="Age" Binding="{Binding Age}" />
            </DataGrid.Columns>
        </DataGrid>
        <Button Content="Load Users" Command="{Binding LoadUsersCommand}" Margin="10" HorizontalAlignment="Right" VerticalAlignment="Bottom" />
    </Grid>
</Window>

这里使用了 DataGrid 控件来显示用户信息,使用 Button 控件来触发 LoadUsers 命令。注意,必须在 Window 标签中设置 DataContext 属性为 MainViewModel 的实例,这样才能把 ViewModel 中的属性和命令绑定到界面上。

总结

使用 WPF MVVM 模式结合 SQLSugar 访问 MySQL 数据库,可以帮助你创建一个结构良好且易于维护的应用程序。以上步骤为你提供了一个简单的指导,但在实际开发中,你可能需要根据项目的具体需求进行适当的调整和扩展。

相关推荐
heartbeat..14 小时前
Spring AOP 全面详解(通俗易懂 + 核心知识点 + 完整案例)
java·数据库·spring·aop
麦聪聊数据16 小时前
MySQL并发与锁:从“防止超卖”到排查“死锁”
数据库·sql·mysql
AC赳赳老秦17 小时前
DeepSeek 私有化部署避坑指南:敏感数据本地化处理与合规性检测详解
大数据·开发语言·数据库·人工智能·自动化·php·deepseek
myzshare18 小时前
实战分享:我是如何用SSM框架开发出一个完整项目的
java·mysql·spring cloud·微信小程序
YMatrix 官方技术社区18 小时前
YMatrix 存储引擎解密:MARS3 存储引擎如何超越传统行存、列存实现“时序+分析“场景性能大幅提升?
开发语言·数据库·时序数据库·数据库架构·智慧工厂·存储引擎·ymatrix
辞砚技术录18 小时前
MySQL面试题——索引2nd
数据库·mysql·面试
linweidong19 小时前
C++thread pool(线程池)设计应关注哪些扩展性问题?
java·数据库·c++
墨笔之风19 小时前
java后端根据双数据源进行不同的接口查询
java·开发语言·mysql·postgres
欧亚学术20 小时前
突发!刚刚新增17本期刊被剔除!
数据库·论文·sci·期刊·博士·scopus·发表
黑白极客20 小时前
怎么给字符串字段加索引?日志系统 一条更新语句是怎么执行的
java·数据库·sql·mysql·引擎