English | 中文

## 🍬 SqlSugar SqlSugar ORM is a library providing Object/Relational Mapping (ORM) support to applications, libraries, and frameworks. Using SqlSugar is very simple , And it's powerful. - Support SqlServer、MySql and Oracle insert blukcopy - Support Multi-tenant, multi-library transactions - Support Support CodeFirst data migration. - Support Join query 、 Union all 、 Subquery - Support Configure the query - Support DbFirst import entity class from database, or use Generation Tool. - Support one-to-many and many-to-many navigation properties - Support MySql、SqlServer、Sqlite、Oracle 、 postgresql 、达梦、人大金仓 、神通数据库 ## Documentation ## Feature characteristic ### Feature1: Join query Super simple query syntax ```cs var query5 = db.Queryable() .LeftJoin ((o, cus) => o.CustomId == cus.Id) .LeftJoin ((o, cus, oritem ) => o.Id == oritem.OrderId) .LeftJoin ((o, cus, oritem , oritem2) => o.Id == oritem2.OrderId) .Where(o => o.Id == 1) .Select((o, cus) => new ViewOrder { Id = o.Id, CustomName = cus.Name }) .ToList(); ``` ```sql SELECT [o].[Id] AS [Id], [cus].[Name] AS [CustomName] FROM [Order] o Left JOIN [Custom] cus ON ([o].[CustomId] = [cus].[Id]) Left JOIN [OrderDetail] oritem ON ([o].[Id] = [oritem].[OrderId]) Left JOIN [OrderDetail] oritem2 ON ([o].[Id] = [oritem2].[OrderId]) WHERE ([o].[Id] = @Id0) ``` ### Feature2: Page query ```cs int pageIndex = 1; int pageSize = 20; int totalCount=0; var page = db.Queryable().ToPageList(pageIndex, pageSize, ref totalCount); ``` ### Feature3:Dynamic expression ```cs var names= new string [] { "a","b"}; Expressionable exp = new Expressionable(); foreach (var item in names) { exp.Or(it => it.Name.Contains(item.ToString())); } var list= db.Queryable().Where(exp.ToExpression()).ToList(); ``` ```sql SELECT [Id],[Name],[Price],[CreateTime],[CustomId] FROM [Order] WHERE ( ([Name] like '%'+ CAST(@MethodConst0 AS NVARCHAR(MAX))+'%') OR ([Name] like '%'+ CAST(@MethodConst1 AS NVARCHAR(MAX))+'%') ) ``` ### Feature4: Multi-tenant transaction ```cs //Creaate database object SqlSugarClient db = new SqlSugarClient(new List() { new ConnectionConfig(){ ConfigId="0", DbType=DbType.SqlServer, ConnectionString=Config.ConnectionString, IsAutoCloseConnection=true }, new ConnectionConfig(){ ConfigId="1", DbType=DbType.MySql, ConnectionString=Config.ConnectionString4 ,IsAutoCloseConnection=true} }); var mysqldb = db.GetConnection("1");//mysql db var sqlServerdb = db.GetConnection("0");// sqlserver db db.BeginTran(); mysqldb.Insertable(new Order() { CreateTime = DateTime.Now, CustomId = 1, Name = "a", Price = 1 }).ExecuteCommand(); mysqldb.Queryable().ToList(); sqlServerdb.Queryable().ToList(); db.CommitTran(); ``` ### Feature5: Singleton Pattern Implement transactions across methods ```CS public static SqlSugarScope Db = new SqlSugarScope(new ConnectionConfig() { DbType = SqlSugar.DbType.SqlServer, ConnectionString = Config.ConnectionString, IsAutoCloseConnection = true }, db=> { db.Aop.OnLogExecuting = (s, p) => { Console.WriteLine(s); }; }); using (var tran = Db.UseTran()) { //业务代码 new Test2().Insert(XX); new Test1().Insert(XX); .....出错会自动回滚 .... tran.CommitTran();//这个提交不能漏掉 } ```