---
title: "使用 FreeSQL 连接 OceanBase 数据库 - OceanBase 数据库 V4.3.5 | OceanBase 文档中心"
description: 使用 FreeSQL 连接 OceanBase 数据库 功能适用性 FreeSQL 适用于 OceanBase 数据库 MySQL 模式。 FreeSQL 是一个功能强大且灵活的 .NET ORM 框架，支持多种数据库。本文将介绍如何使用 FreeSQL 连接 OceanBase 数据库的 MySQL 模式。 前提条…
image: https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*OSPzQ6GUQF4AAAAAQHAAAAgAeiGDAQ/original
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 4.3.5 LTS

# 使用 FreeSQL 连接 OceanBase 数据库

更新时间：2026-04-09 14:12:04

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.3.5/zh-CN/680.ecological-integration/200.orms-frameworks/700.c-sharp/300.freesql-connection-oceanbase-database-program.md)

#### 功能适用性

FreeSQL 适用于 OceanBase 数据库 MySQL 模式。

FreeSQL 是一个功能强大且灵活的 .NET ORM 框架，支持多种数据库。本文将介绍如何使用 FreeSQL 连接 OceanBase 数据库的 MySQL 模式。

## 前提条件

- 已安装 .NET SDK 6.0 或更高版本
 - 已安装 Visual Studio 或 VS Code
 - 已部署 OceanBase 数据库并且创建了 MySQL 模式租户

## 操作步骤

1. 创建新项目
 2. 安装必要的 NuGet 包
 3. 配置数据库连接
 4. 创建数据模型
 5. 实现数据访问层
 6. 运行示例程序

### 步骤一：创建新项目

1. 打开终端，运行以下命令创建新的控制台应用：

   ```bash
   dotnet new console -n FreeSQLOceanBaseDemo
   cd FreeSQLOceanBaseDemo

   ```

### 步骤二：安装必要的 NuGet 包

1. 安装 FreeSQL 和必要的依赖包：

   ```bash
   # ORM 核心包
   dotnet add package FreeSQL
   dotnet add package FreeSql.Provider.MySqlConnector
   dotnet add package FreeSql.DbContext

   # 配置相关
   dotnet add package Microsoft.Extensions.Configuration --version 8.0.0
   dotnet add package Microsoft.Extensions.Configuration.FileExtensions --version 8.0.0
   dotnet add package Microsoft.Extensions.Configuration.Json --version 8.0.0

   # 密码加密
   dotnet add package BCrypt.Net-Next --version 4.0.3

   ```

### 步骤三：配置数据库连接

1. 创建 `appsettings.json` 文件并添加数据库连接字符串：

   ```json
   {
     "ConnectionStrings": {
       "DefaultConnection": "Server=your_server;Port=2881;Database=your_database;Uid=your_username;Pwd=your_password;"
     }
   }

   ```
 2. 修改项目文件 (`.csproj`) 确保 `appsettings.json` 被复制到输出目录：

   ```xml
   <ItemGroup>
     <None Update="appsettings.json">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </None>
   </ItemGroup>

   ```

### 步骤四：创建数据模型

1. 创建 `Models` 文件夹并添加 `User.cs` 类：

   ```csharp
   using FreeSql.DataAnnotations;
   using System;

   namespace FreeSQLOceanBaseDemo.Models;

   [Table(Name = "users")]
   public class User
   {
       [Column(IsPrimary = true, IsIdentity = true)]
       public int Id { get; set; }

       [Column(StringLength = 50, IsNullable = false)]
       public string Username { get; set; }

       [Column(StringLength = 100, IsNullable = false)]
       public string Email { get; set; }

       [Column(StringLength = 255, IsNullable = false)]
       public string PasswordHash { get; set; }

       [Column(ServerTime = DateTimeKind.Utc, CanUpdate = false)]
       public DateTime CreatedAt { get; set; }

       [Column(ServerTime = DateTimeKind.Utc)]
       public DateTime? UpdatedAt { get; set; }
   }

   ```

### 步骤五：实现数据访问层

1. 创建 `Data` 文件夹并添加 `AppDbContext.cs` 类：

   ```csharp
   using FreeSql;
   using System.Data;
   using FreeSql.DatabaseModel;
   using FreeSQLOceanBaseDemo.Models;
   using Microsoft.Extensions.Configuration;
   using System;
   using System.IO;
   namespace FreeSQLOceanBaseDemo.Data;
   public class AppDbContext : DbContext
   {
   public DbSet Users { get; set; }
   private readonly IConfiguration _configuration;
   private static IFreeSql _fsql;
   public AppDbContext(IConfiguration configuration)
   {
   _configuration = configuration;

   if (_fsql == null)
   {
       _fsql = new FreeSqlBuilder()
           .UseConnectionString(DataType.MySql, _configuration.GetConnectionString("DefaultConnection"))
           .UseMonitorCommand(cmd =>
           {
               Console.WriteLine($"SQL: {cmd.CommandText}");
               if (cmd.Parameters != null)
               {
                   foreach (IDataParameter param in cmd.Parameters)
                   {
                       Console.WriteLine($"  -> {param.ParameterName}: {param.Value}");
                   }
               }
           })
           .UseAutoSyncStructure(true)
           .Build();

       _fsql.Aop.CurdBefore += (s, e) =>
       {
           Console.WriteLine($"执行前: {e.Sql}");
       };

       _fsql.Aop.CurdAfter += (s, e) =>
       {
           Console.WriteLine($"执行后，影响行数: {e.ElapsedMilliseconds}ms");
       };
   }
   }
   public IFreeSql GetFreeSql()
   {
   return _fsql;
   }
   }

   ```
 2. 创建 `Repositories` 文件夹并添加 `UserRepository.cs` 类：

   ```csharp
   using FreeSql;
   using FreeSQLOceanBaseDemo.Models;
   using System;
   using System.Collections.Generic;
   using System.Threading.Tasks;

   namespace FreeSQLOceanBaseDemo.Repositories;

   public class UserRepository
   {
       private readonly IFreeSql _fsql;

       public UserRepository(IFreeSql fsql)
       {
           _fsql = fsql;
       }

       public async Task<List<User>> GetAllUsersAsync()
       {
           return await _fsql.Select<User>().ToListAsync();
       }

       public async Task<User> GetUserByIdAsync(int id)
       {
           return await _fsql.Select<User>().Where(u => u.Id == id).FirstAsync();
       }

       public async Task<User> CreateUserAsync(User user)
       {
           user.CreatedAt = DateTime.UtcNow;
           await _fsql.Insert(user).ExecuteAffrowsAsync();
           return user;
       }

       public async Task<bool> UpdateUserAsync(User user)
       {
           user.UpdatedAt = DateTime.UtcNow;
           var result = await _fsql.Update<User>()
               .SetSource(user)
               .ExecuteAffrowsAsync();

           return result > 0;
       }

       public async Task<bool> DeleteUserAsync(int id)
       {
           var result = await _fsql.Delete<User>()
               .Where(u => u.Id == id)
               .ExecuteAffrowsAsync();

           return result > 0;
       }
   }

   ```

### 步骤六：实现主程序

修改 `Program.cs` 文件：

```csharp
using FreeSQLOceanBaseDemo.Data;
using FreeSQLOceanBaseDemo.Models;
using FreeSQLOceanBaseDemo.Repositories;
using Microsoft.Extensions.Configuration;
using System;
using System.IO;
using System.Threading.Tasks;

var configuration = new ConfigurationBuilder()
    .SetBasePath(Directory.GetCurrentDirectory())
    .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
    .Build();

var dbContext = new AppDbContext(configuration);
var userRepository = new UserRepository(dbContext.GetFreeSql());

var newUser = new User
{
    Username = "testuser",
    Email = "test@example.com",
    PasswordHash = BCrypt.Net.BCrypt.HashPassword("your_secure_password")
};

try
{
    var createdUser = await userRepository.CreateUserAsync(newUser);
    Console.WriteLine($"User created with ID: {createdUser.Id}");

    var user = await userRepository.GetUserByIdAsync(createdUser.Id);
    if (user != null)
    {
        Console.WriteLine($"Retrieved user: {user.Username}, Email: {user.Email}");

        user.Username = "updated_username";
        var updated = await userRepository.UpdateUserAsync(user);
        Console.WriteLine($"User updated: {updated}");

        var users = await userRepository.GetAllUsersAsync();
        Console.WriteLine($"Total users: {users.Count}");

        var deleted = await userRepository.DeleteUserAsync(user.Id);
        Console.WriteLine($"User deleted: {deleted}");
    }
}
catch (Exception ex)
{
    Console.WriteLine($"An error occurred: {ex.Message}");
    Console.WriteLine(ex.StackTrace);
}

```

## 运行程序

1. 确保已更新 `appsettings.json` 中的数据库连接字符串。
 2. 在终端中运行：

   ```bash
   dotnet run

   ```

## 相关文档

- [FreeSQL 官方文档](https://freesql.net/guide/)
 - [.NET 数据库访问最佳实践](https://docs.microsoft.com/zh-cn/ef/core/)
 - [OceanBase 官方文档](https://www.oceanbase.com/docs)

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
