mirror of
https://github.com/dotnetcore/FreeSql.git
synced 2026-02-25 17:50:58 +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 ..."); //强制读【主库】
|
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)
|
- [《数据库事务》](%e4%ba%8b%e5%8a%a1)
|
||||||
|
|||||||
Reference in New Issue
Block a user