Updated 读写分离 (markdown)

2881099
2025-05-06 14:59:22 +08:00
parent 1ed1fcad5f
commit c6cc72986a

@@ -28,6 +28,43 @@ fsql.Select<T>().Master().WhereId(a => a.Id == 1).ToOne(); //强制读【主库
fsql.Ado.Query<T>("/*master*/ select * from t where ..."); //强制读【主库】
```
## 使用 FreeSqlCloud 另一种读写分离
```csharp
public enum DbEnum { db1, db2, db3 }
var fsql = new FreeSqlCloud();
fsql.Register(DbEnum.db3, () => new FreeSqlBuilder()
.UseConnectionString(DataType.Sqlite, @"Data Source=:memory:;max pool size=1")
.UseAutoSyncStructure(true).Build());
fsql.Register(DbEnum.db2, () => new FreeSqlBuilder()
.UseConnectionString(DataType.Sqlite, @"Data Source=:memory:;max pool size=2")
.UseAutoSyncStructure(true).Build());
fsql.Register(DbEnum.db1, () => new FreeSqlBuilder()
.UseConnectionString(DataType.Sqlite, @"Data Source=:memory:;max pool size=3")
.UseAutoSyncStructure(true).Build());
fsql.EntitySteering = (_, e) =>
{
switch (e.MethodName)
{
case "Select":
if (e.DBKey == DbEnum.db1) //判断主库时
{
var dbkeyIndex = new Random().Next(0, e.AvailableDBKeys.Length);
e.DBKey = e.AvailableDBKeys[dbkeyIndex]; //重新定向到其他 db
}
break;
case "Insert":
case "Update":
case "Delete":
case "InsertOrUpdate":
break;
}
};
```
## 参考资料
- [《数据库事务》](%e4%ba%8b%e5%8a%a1)