freesql 多数据库
时间: 2025-07-06 22:48:06 浏览: 8
### FreeSQL 中配置和使用多数据库
#### 安装必要的包
为了在应用程序中使用多个数据库,需安装相应的提供程序包。对于 SQL Server 和 MySQL 的组合:
```xml
<PackageReference Include="FreeSql" Version="3.2.690" />
<PackageReference Include="FreeSql.Provider.SqlServer" Version="3.2.690" />
<PackageReference Include="FreeSql.Provider.MySqlConnector" Version="3.2.690" /> <!-- 推荐使用 MySqlConnector -->
```
#### 初始化多数据库实例
创建 `IFreeSql` 实例来管理不同类型的数据库连接。
```csharp
var fsqlSqlServer = new FreeSqlBuilder()
.UseConnectionString(FreeSql.DataType.SqlServer, "Data Source=.;Initial Catalog=test;User ID=sa;Password=1;")
.Build();
var fsqlMySql = new FreeSqlBuilder()
.UseConnectionString(FreeSql.DataType.MySql, "server=localhost;port=3306;database=test;uid=root;pwd=123456;")
.UseAutoSyncStructure(true) // 自动同步结构到数据库
.Build();
```
#### 统一实体类定义
可以为不同的数据库共享相同的实体类定义,也可以针对特定数据库自定义实体属性映射规则[^1]。
```csharp
public class User {
public int Id { get; set; }
[Column(Name = "UserName")] // 可能根据不同DB调整命名约定
public string Name { get; set; }
/// <summary>
/// 此处省略其他字段...
/// </summary>
}
```
#### 跨库查询与事务处理
当涉及到跨两个或更多数据库的操作时,需要注意的是分布式事务的支持情况。FreeSql 支持基本的本地事务控制,但对于复杂的分布式场景,则可能需要借助外部工具实现强一致性保障。
```csharp
using (var tran = fsqlSqlServer.Ado.BeginTransaction()) {
try {
var userRepoSqlServer = fsqlSqlServer.GetRepository<User>();
await userRepoSqlServer.InsertAsync(new User { /* ... */ });
var userRepoMySql = fsqlMySql.GetRepository<User>();
await userRepoMySql.InsertAsync(new User { /* ... */ });
tran.Commit(); // 提交所有更改
} catch(Exception ex){
tran.Rollback(); // 发生异常回滚全部操作
throw;
}
}
```
阅读全文
相关推荐


















