C#教程

关注公众号 jb51net

关闭
首页 > 软件编程 > C#教程 > C# Dapper与金仓数据库交互

C# 使用Dapper与金仓数据库交互的实现步骤

作者:caifox菜狐狸

本文主要介绍了C# 使用 Dapper 与金仓数据库交互,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

C# 配合 Dapper 与金仓数据库(KingbaseES)进行交互,可以使用如下方法实现

1. 安装必要的 NuGet 包

Install-Package Dapper
Install-Package Npgsql  # 金仓数据库兼容 PostgreSQL 协议

2. 基本配置和连接

using System.Data;
using Dapper;
using Npgsql;

// 连接字符串配置
string connectionString = "Host=localhost;Port=54321;Database=mykingbase;User Id=myuser;Password=mypassword;";

// 创建连接
using (IDbConnection connection = new NpgsqlConnection(connectionString))
{
    connection.Open();
    
    // 执行查询
    var result = connection.Query<string>("SELECT version()");
    Console.WriteLine(result.First());
}

3. 完整的 CRUD 操作示例

public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }
    public DateTime CreatedAt { get; set; }
}

public class UserRepository
{
    private readonly string _connectionString;

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

    // 查询
    public async Task<User> GetUserByIdAsync(int id)
    {
        using var connection = new NpgsqlConnection(_connectionString);
        return await connection.QueryFirstOrDefaultAsync<User>(
            "SELECT * FROM users WHERE id = @Id", new { Id = id });
    }

    // 插入
    public async Task<int> InsertUserAsync(User user)
    {
        using var connection = new NpgsqlConnection(_connectionString);
        var sql = @"INSERT INTO users (name, email, created_at) 
                   VALUES (@Name, @Email, @CreatedAt) RETURNING id";
        return await connection.ExecuteScalarAsync<int>(sql, user);
    }

    // 更新
    public async Task<int> UpdateUserAsync(User user)
    {
        using var connection = new NpgsqlConnection(_connectionString);
        var sql = @"UPDATE users SET name = @Name, email = @Email 
                   WHERE id = @Id";
        return await connection.ExecuteAsync(sql, user);
    }

    // 删除
    public async Task<int> DeleteUserAsync(int id)
    {
        using var connection = new NpgsqlConnection(_connectionString);
        return await connection.ExecuteAsync(
            "DELETE FROM users WHERE id = @Id", new { Id = id });
    }
}

4. 事务处理

public async Task<bool> TransferBalanceAsync(int fromUserId, int toUserId, decimal amount)
{
    using var connection = new NpgsqlConnection(_connectionString);
    connection.Open();
    
    using var transaction = connection.BeginTransaction();
    try
    {
        // 扣款
        await connection.ExecuteAsync(
            "UPDATE accounts SET balance = balance - @Amount WHERE user_id = @UserId",
            new { Amount = amount, UserId = fromUserId }, transaction);

        // 存款
        await connection.ExecuteAsync(
            "UPDATE accounts SET balance = balance + @Amount WHERE user_id = @UserId",
            new { Amount = amount, UserId = toUserId }, transaction);

        transaction.Commit();
        return true;
    }
    catch
    {
        transaction.Rollback();
        throw;
    }
}

5. 连接字符串配置建议

appsettings.json 中配置:

{
  "ConnectionStrings": {
    "KingbaseConnection": "Host=localhost;Port=54321;Database=mydb;User Id=myuser;Password=mypassword;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=100;"
  }
}

注意事项:

这样配置后,你就可以像使用其他数据库一样,使用 Dapper 与金仓数据库进行高效的数据交互了。

到此这篇关于C# 使用Dapper与金仓数据库交互的实现步骤的文章就介绍到这了,更多相关C# Dapper与金仓数据库交互内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文