C# Dapper在项目中的使用(mvvm)

Dapper 简介

Dapper 是一个轻量级的对象关系映射(Object - Relational Mapping,ORM)工具,它在.NET 应用程序中用于简化数据库访问操作。它提供了高性能、简单易用的方式来执行 SQL 查询和命令,并且与ADO.NET紧密集成。Dapper 的主要优势在于其简洁性和高性能,它能够快速地将数据库查询结果映射到 C# 对象,并且在执行 SQL 命令时具有较低的开销。

我们这里介绍一下如何在项目中使用Dapper,并进行归类。如果你只想简单实现,可以参考我上一篇文章。

使用 Dapper 的准备工作

安装 Dapper:

可以通过 NuGet 包管理器来安装 Dapper。在 Visual Studio 中,右键点击项目,选择 "管理 NuGet 程序包",然后在 NuGet 包管理器中搜索 "Dapper" 并安装。

数据库准备

根据自己的需求进行下载数据库的资源包,我这边使用的数据库是sqlite,接下来的例子以它来写。

包管理

因为我的项目时mvvm的,大家可以根据自己的项目建其他的包,红框圈住的包分别是

  • common 工具包
  • interfaces 实现类接口包
  • MOdels 实体类
  • Services 实现类
    在完整的项目中,这几个包都是必要的。

    话不多说,直接上代码

工具包

SqliteConnectionFactory

clike 复制代码
  public class SqliteConnectionFactory
  {


      private readonly string _connectionString;

      public SqliteConnectionFactory(string connectionString)
      {
          _connectionString = connectionString;
      }

      public IDbConnection CreateConnection(string _connectionString)
      {
          _connectionString = "Data Source=precess.db;Version=3;";
          return new SQLiteConnection(_connectionString);
      }

实现类接口

IUserServices

clike 复制代码
 public interface IUserServices
 {
     User Login(string username, string password);
     User FindUserName(string userName);
     User FindId(int id);
     List<User> FindAll();
 }

实现类

UserServices

clike 复制代码
public class UserServices : IUserServices
{
    private static string connection1;
    private readonly SqliteConnectionFactory connectionFactory = new SqliteConnectionFactory(connection1);
    public List<User> FindAll()
    {
        using (var connection = connectionFactory.CreateConnection(connection1))
        {
            connection.Open();
            // 编写更新语句
            string Query = "SELECT * FROM User";

             执行更新操作
            List<User>_users = (List<User>)connection.Query<User>(Query);
            return _users;

        }
    }

    public User FindId(int id)
    {
        using (var connection = connectionFactory.CreateConnection(connection1))
        {
            connection.Open();
            // 编写更新语句
            string Query = "SELECT * FROM User where Id = @id";

             执行更新操作
            User _users = connection.QueryFirst<User>(Query, new { id = id });
            return _users;

        }
    }

    public User FindUserName(string userName)
    {
        using (var connection = connectionFactory.CreateConnection(connection1))
        {
            connection.Open();
            // 编写更新语句
            string Query = "SELECT * FROM User where UserName = @UserName";

             执行更新操作
            User _users = connection.QueryFirst<User>(Query, new { UserName = userName });
            return _users;

        }
    }

    public User Login(string username, string password)
    {
        throw new NotImplementedException();
    }
}

实体类

User

clike 复制代码
  public class User
  {
      public int Id { get; set; }
      // <summary>用户名</summary>
      private string _userName;
      public string UserName { get => _userName; set => SetProperty(ref _userName, value); }
      // <summary>密码</summary>
      private string _passWork;
      public string PassWork { get => _passWork; set => SetProperty(ref _passWork, value); }
      // <summary>级别</summary>
      private string _level;
      public string Level { get => _level; set => SetProperty(ref _level, value); }
  }

方法使用

我们在使用时,需要进行一下依赖注入

以我的项目为例,在vm中加上以下代码:

clike 复制代码
private readonly IUserServices _userServices;

如何在主方法上加上:

clike 复制代码
IUserServices userServices,

然后在方法中注入如图所示:

到这里就完成了,但是有一点需要注意,我们view层也要进行一下注入,可以跟上述方法一样进行,我下一篇文章会讲一下如何把这些依赖都封装起来,并完成mvvm绑定。

小白路漫漫,让我们一起加油!!!

相关推荐
Highcharts.js4 分钟前
缺失数据可视化图表开发实战|Highcharts创建人员出生统计面积图表示例
开发语言·前端·javascript·信息可视化·highcharts·图表开发
测试员周周5 小时前
【Appium 系列】第16节-WebView-H5上下文切换 — 混合应用的自动化难点
运维·开发语言·人工智能·功能测试·appium·自动化·测试用例
杜子不疼.7 小时前
【C++ AI 大模型接入 SDK】 - DeepSeek 模型接入(上)
开发语言·c++·chatgpt
加号37 小时前
【C#】 串口通信技术深度解析及实现
开发语言·c#
sycmancia8 小时前
Qt——编辑交互功能的实现
开发语言·qt
石山代码8 小时前
C++ 内存分区 堆区
java·开发语言·c++
无风听海9 小时前
C# 隐式转换深度解析
java·开发语言·c#
LateFrames9 小时前
520 - 如何说晚安 (WPF)
c#·wpf·浪漫·ui体验
一只大袋鼠9 小时前
Git 进阶(二):分支管理、暂存栈、远程仓库与多人协作
java·开发语言·git
LuminousCPP10 小时前
数据结构 - 线性表第四篇:C 语言通讯录优化升级全记录(踩坑 + 思考)
c语言·开发语言·数据结构·经验分享·笔记·学习