Dapper.Sharding 3.0.13

dotnet add package Dapper.Sharding --version 3.0.13
NuGet\Install-Package Dapper.Sharding -Version 3.0.13
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Dapper.Sharding" Version="3.0.13" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Dapper.Sharding --version 3.0.13
#r "nuget: Dapper.Sharding, 3.0.13"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Dapper.Sharding as a Cake Addin
#addin nuget:?package=Dapper.Sharding&version=3.0.13

// Install Dapper.Sharding as a Cake Tool
#tool nuget:?package=Dapper.Sharding&version=3.0.13

sharding for mysql、postgresql、sqlserver、sqlite、clickhouse、oracle

https://gitee.com/znyet/Dapper.Sharding
https://www.nuget.org/packages/Dapper.Sharding.CAP

//不缓存SQL
DapperFactory.CacheSql = false;
//ShardingFactory.CacheSql(false);

//捕获sql语句
DapperFactory.OnExecuteSql += (sql, par) =>
{
    Console.WriteLine(sql);
};
var config = new DataBaseConfig { Server = "127.0.0.1", UserId = "root", Password = "123", Port = 3306 };

//client must be singleton mode(必须是单例模式)
static IClient client = ShardingFactory.CreateClient(DataBaseType.MySql, config);
//static IClient client = ShardingFactory.CreateClient(DataBaseType.SqlServer, config, DataBaseVersion.SqlServer2012);  
//client.AutoCreateDatabase = true; //自动创建数据库
//client.AutoCreateTable = true; //自动创建表
//client.AutoCompareTableColumn = false; //是否自动对比列
//client.AutoCompareTableColumnLength = false; //是否自动对比字段长度
//client.AutoCompareTableColumnDelete = false; //是否自动对比删除列

var db = client.GetDatabase("test");
//var db2 = client.GetDatabase("test2"); //this will create database test2 (自由分库)

var table = db.GetTable<Student>("student"); //自由分表
table.Insert(new Student { Id = ShardingFactory.NextObjectId(), Name = "lina" });

var table2 = db.GetTable<Student>("student2");//this will create table student2
table2.Insert(new Student { Id = ShardingFactory.NextObjectId(), Name = "lina2" });

var table3 = db.GetTable<Student>("student3");
table3.Insert(new Student { Id = ShardingFactory.NextObjectId(), Name = "lina3" });

//sharding query on all table(分片查询)
var query = new ShardingQuery(table, table2, table3); 
var total = await query.CountAsync();
or
var data = await query.QueryAsync("SELECT * FROM $table"); //$table is each table name

//Transaction(分布式事务)
var tran = new DistributedTransaction();
try
{
    table.Insert(new Student { Id = "111", Name = "lina" }, tran);
    table.Delete("1", tran);
    table2.Delete("2", tran);
    table3.Delete("3", tran);
    tran.Commit();
}
catch
{
    tran.Rollback();    
}
//Transaction CAP
//https://www.nuget.org/packages/Dapper.Sharding.CAP

namespace ConsoleApp
{
    [Table("Id", false, "学生表")]
    public class Student
    {
        [Column(24, "主键id")]
        public string Id { get; set; }

        [Column(50, "名字")]
        public string Name { get; set; }

        [Column(20, "年龄")]
        public long Age { get; set; }

        [Ignore]
        public string NoDatabaseColumn { get; set; }
    }
}
//custom column type
[Column(columnType: "int")]
//IQuery
var query = table.AsQuery("a")
     .LeftJoin(table2, "b", "a.bid=b.id")
     .Where("a.name=@name")
     .OrderBy("a.id")
     .ReturnFields("a.*,b.name as bname")
     //.Limit(10)
     .Page(1, 10)
     .Param(new { name = "lili" });

var data = query.Query<T>();
var data2 = query.QueryPageAndCount<T>();

//IUnion
var union = query.Union(query2)
		 .Union(query3)
		 .Where("name=@name")
		 .OrderBy("id")
		 .Page(1, 10)
		 .Param(new { name = "lili" });

var data = union.Query<T>();
//client must singleton mode(必须是单例模式)

    /*===mysql need MySqlConnector≥2.2.6===*/
    public static IClient Client = ShardingFactory.CreateClient(DataBaseType.MySql, new DataBaseConfig { Server = "127.0.0.1", UserId = "root", Password = "123", Port = 3306 })

    /*===sqlite need System.Data.SQLite.Core≥1.0.118===*/
    //public static IClient Client = ShardingFactory.CreateClient(DataBaseType.Sqlite, new DataBaseConfig { Server = "D:\\DatabaseFile" })

    /*===sqlserver need Microsoft.Data.SqlClient≥2.1.4 ===*/
    //public static IClient Client = ShardingFactory.CreateClient(DataBaseType.SqlServer2008, new DataBaseConfig { Server = ".\\express", UserId = "sa", Password = "123456", Database_Path = "D:\\DatabaseFile" })
   
    /*===clickhouse need ClickHouse.Client≥6.7.0 ===*/
   //public static IClient ClientHouse = ShardingFactory.CreateClient(DataBaseType.ClickHouse, new DataBaseConfig { Server = "192.168.0.200" });
    
    /*===postgresql need Npgsql≥7.0.4===*/
    //public static IClient Client = ShardingFactory.CreateClient(DataBaseType.Postgresql, new DataBaseConfig { Server = "127.0.0.1", UserId = "postgres", Password = "123" })


  /*===duckdb need DuckDB.NET.Data.Full≥0.9.1===*/
    //public static IClient Client = ShardingFactory.CreateClient(DataBaseType.DuckDB, new DataBaseConfig { Server = "db" })

    /*===oracle need Oracle.ManagedDataAccess.Core≥3.21.100===*/
    static DataBaseConfig oracleConfig = new DataBaseConfig
    {
        Server = "127.0.0.1",
        UserId = "test",
        Password = "123",
        Oracle_ServiceName = "xe",
        Oracle_SysUserId = "sys",
        Oracle_SysPassword = "123",
        Database_Path = "D:\\DatabaseFile",
        Database_Size_Mb = 1,
        Database_SizeGrowth_Mb = 1
    };
    //public static IClient Client = ShardingFactory.CreateClient(DataBaseType.Oracle, oracleConfig)
//json or json string field
namespace ConsoleApp1
{
    [Table("Id", true, "人类")]
    public class School
    {
        public int Id { get; set; }

        public string Name { get; set; }
        
        //[JsonString]
        //[Column(columnType: "varchar(8000)")]
        [Column(columnType: "jsonb")]
        public Student Stu { get; set; }  //json or json string
    }

    public class Student
    {
        public string Name { get; set; }

        public int Age { get; set; }
    }
}

var config = new DataBaseConfig { Password = "123" };
var client = ShardingFactory.CreateClient(DataBaseType.Postgresql, config);
client.AutoCompareTableColumn = true;

//TypeHandlerJsonNet.Add(typeof(Student)); //json.net
TypeHandlerSystemTextJson.Add(typeof(Student)); //System.Text.Json add dapper typehandler

var db = client.GetDatabase("test");
var table = db.GetTable<School>("school");

var school = new School
{
    Name = "test",
    Stu = new Student
    {
        Name = "lihua",
        Age = 18
    }
};
table.Insert(school);
//table.InsertMany(list);
var model = table.GetById(1);
Console.WriteLine(model.Stu.Name);

//System.Text.Json
TypeHandlerSystemTextJson.Add(typeof(Student));
TypeHandlerSystemTextJson.Add(typeof(List<Student>));
TypeHandlerSystemTextJson.Add(typeof(JsonObject));
TypeHandlerSystemTextJson.Add(typeof(JsonArray));
/**Add Assembly***/
TypeHandlerSystemTextJson.Add(typeof(Student).Assembly);

//Json.Net
TypeHandlerJsonNet.Add(typeof(Student));
TypeHandlerJsonNet.Add(typeof(List<Student>));
TypeHandlerJsonNet.Add(typeof(JObject));
TypeHandlerJsonNet.Add(typeof(JArray));
/**Add Assembly***/
TypeHandlerJsonNet.Add(typeof(Student).Assembly);
GeneratorClassFile(can create class entity file from database) //代码生成器
db.GeneratorTableFile("D:\\Class"); //生成表实体类
db.GeneratorDbContextFile("D:\\Class"); //生成请求上下文文件
//Npgsql GeoJson
NpgsqlConnection.GlobalTypeMapper.UseGeoJson();
NpgsqlGeoJsonFactory.UseGeoJson();

//Npgsql NetTopologySuite
NpgsqlConnection.GlobalTypeMapper.UseNetTopologySuite();
NpgsqlGeoFactory.UseGeo();
//Npgsql DateTimeOffset
AppContext.SetSwitch("Npgsql.EnableLegacyTimestampBehavior", true);
AppContext.SetSwitch("Npgsql.DisableDateTimeInfinityConversions", true);
//json config
{
    "DbType": "mysql",
    "Server": "127.0.0.1",
    "UserId": "sa",
    "Password": "123456",
    "AutoCreateDatabase": true,
    "AutoCreateTable": true,
    "AutoCompareTableColumn": true,
    "AutoCompareTableColumnLength": true,
    "AutoCompareTableColumnDelete": true,
    "Database": "test",
    "node": {
        "DbType": "pgsql",
        "Server": "127.0.0.2",
        "UserId": "saa",
        "Password": "1234567",
        "AutoCreateDatabase": true,
        "AutoCreateTable": true,
        "AutoCompareTableColumn": true,
        "AutoCompareTableColumnLength": true,
        "AutoCompareTableColumnDelete": true,
        "Database": "test2"
    }

}
//load json config
var c1 = ConfigSystemTextJson.LoadConfig("db.json");
var c2 = ConfigJsonNet.LoadConfig("db.json");

var c3 = ConfigSystemTextJson.LoadConfig("db.json", "node");
var c4 = ConfigJsonNet.LoadConfig("db.json", "node");
Product Compatible and additional computed target framework versions.
.NET net5.0 is compatible.  net5.0-windows was computed.  net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 is compatible.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.1 is compatible. 
.NET Framework net40 is compatible.  net403 was computed.  net45 is compatible.  net451 was computed.  net452 was computed.  net46 was computed.  net461 was computed.  net462 is compatible.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on Dapper.Sharding:

Package Downloads
Dapper.Sharding.CAP

My package description.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
3.0.13 79 4/21/2024
3.0.12 93 3/7/2024
3.0.11 103 3/1/2024
3.0.10 109 1/30/2024