mirror of
https://github.com/dotnetcore/FreeSql.git
synced 2026-02-16 21:30:57 +08:00
Updated 读写分离 (markdown)
37
读写分离.md
37
读写分离.md
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user