- Notifications
You must be signed in to change notification settings - Fork1.4k
.Net aot ORM SqlServer ORM Mongodb ORM MySql 瀚高 Postgresql ORM DB2 Hana 高斯 Duckdb C# VB.NET Sqlite ORM Oracle ORM Mysql Orm 虚谷数据库 达梦 ORM 人大金仓 ORM 神通ORM C# ORM , C# ORM .NET ORM NET9 ORM .NET8 ORM ClickHouse ORM QuestDb ,TDengine ORM,OceanBase ORM,GaussDB ORM,Tidb ORM Object/Relational Mapping
License
DotNetNext/SqlSugar
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
English |中文
SqlSugar is .NET open source ORM framework, maintained and updated by Fructose Big Data Technology team, the most easy-to-use ORM out of the box
Advantages: [Low code] [High performance] [Super simple] [Comprehensive features] [ Multi-database compatible] [Suitable products]
.net framework.net core3.1.ne5.net6.net7.net8 .net9 .net10
MySql、SqlServer、Sqlite、Oracle 、 postgresql、达梦、Mongodb人大金仓(国产推荐)、神通数据库、瀚高、Access DB2、DuckDb、Hana、OceanBaseTDengine QuestDb Clickhouse MySqlConnector、华为 GaussDB南大通用 GBase、MariaDB、Tidb、Odbc、Percona Server,Amazon Aurora、Azure Database for MySQL、Google Cloud SQL for MySQL、custom database
- Truly achieve zero SQL ORM table building, index and CRUD all support
- Support.NET millions of big data write, update, subtable and has billions of query statistics mature solutions
- Support SAAS complete application: cross-database query, audit, tenant sub-database, tenant sub-table and tenant data isolation
- Support low code + workflow (dynamic class building, dynamic table building, non-entity multi-library compatible with CRUD, JSON TO SQL, custom XML, etc.)
- Support ValueObject, discriminator, repository, UnitOfWork, DbContext, AOP
Super simple query syntax
varquery=db.Queryable<Order>().LeftJoin<Custom>((o,cus)=>o.CustomId==cus.Id).LeftJoin<OrderItem>((o,cus,oritem)=>o.Id==oritem.OrderId).LeftJoin<OrderItem>((o,cus,oritem,oritem2)=>o.Id==oritem2.OrderId).Where(o=>o.Id==1).Select((o,cus)=>newViewOrder{Id=o.Id,CustomName=cus.Name}).ToList();
SELECT [o].[Id]AS [Id], [cus].[Name]AS [CustomName]FROM [Order] oLeft JOIN [Custom] cusON ([o].[CustomId]= [cus].[Id])Left JOIN [OrderDetail] oritemON ([o].[Id]= [oritem].[OrderId])Left JOIN [OrderDetail] oritem2ON ([o].[Id]= [oritem2].[OrderId])WHERE ([o].[Id]= @Id0)
//Includesvarlist=db.Queryable<Test>().Includes(x=>x.Provinces,x=>x.Citys,x=>x.Street)//multi-level.Includes(x=>x.ClassInfo).ToList();//Includes+left joinvarlist5=db.Queryable<Student_004>().Includes(x=>x.school_001, x=>x.rooms).Includes(x=>x.books).LeftJoin<Order>((x,y)=>x.Id==y.sid).Select((x,y)=>newStudent_004DTO{SchoolId=x.SchoolId,books=x.books,school_001=x.school_001,Name=y.Name}).ToList();
intpageIndex=1;intpageSize=20;inttotalCount=0;varpage=db.Queryable<Student>().ToPageList(pageIndex,pageSize,reftotalCount);
varnames=newstring[]{"a","b"};Expressionable<Order>exp=newExpressionable<Order>();foreach(variteminnames){exp.Or(it=>it.Name.Contains(item.ToString()));}varlist=db.Queryable<Order>().Where(exp.ToExpression()).ToList();
SELECT [Id],[Name],[Price],[CreateTime],[CustomId]FROM [Order]WHERE ( ([Name]like'%'+ CAST(@MethodConst0AS NVARCHAR(MAX))+'%')OR ([Name]like'%'+ CAST(@MethodConst1AS NVARCHAR(MAX))+'%') )
//Creaate database objectSqlSugarClientdb=newSqlSugarClient(newList<ConnectionConfig>(){newConnectionConfig(){ConfigId="0",DbType=DbType.SqlServer,ConnectionString=Config.ConnectionString,IsAutoCloseConnection=true},newConnectionConfig(){ConfigId="1",DbType=DbType.MySql,ConnectionString=Config.ConnectionString4,IsAutoCloseConnection=true}});varmysqldb=db.GetConnection("1");//mysql dbvarsqlServerdb=db.GetConnection("0");// sqlserver dbdb.BeginTran();mysqldb.Insertable(newOrder(){CreateTime=DateTime.Now,CustomId=1,Name="a",Price=1}).ExecuteCommand();mysqldb.Queryable<Order>().ToList();sqlServerdb.Queryable<Order>().ToList();db.CommitTran();
Implement transactions across methods
publicstaticSqlSugarScopeDb=newSqlSugarScope(newConnectionConfig(){DbType=SqlSugar.DbType.SqlServer,ConnectionString=Config.ConnectionString,IsAutoCloseConnection=true}, db=>{db.Aop.OnLogExecuting=(s,p)=>{Console.WriteLine(s);};});using(vartran=Db.UseTran()){newTest2().Insert(XX);newTest1().Insert(XX); ..... ....tran.CommitTran();}
//set filterdb.QueryFilter.Add(newTableFilterItem<Order>(it=>it.Name.Contains("a")));db.Queryable<Order>().ToList();//SELECT [Id],[Name],[Price],[CreateTime],[CustomId] FROM [Order] WHERE ([Name] like '%'+@MethodConst0+'%')db.Queryable<OrderItem,Order>((i,o)=>i.OrderId==o.Id).Where(i=>i.OrderId!=0).Select("i.*").ToList();//SELECT i.* FROM [OrderDetail] i ,[Order] o WHERE ( [i].[OrderId] = [o].[Id] ) AND//( [i].[OrderId] <> @OrderId0 ) AND ([o].[Name] like '%'+@MethodConst1+'%')
insert or update
Db.Storageable(list2).ExecuteCommand();Db.Storageable(list2).PageSize(1000).ExecuteCommand();Db.Storageable(list2).PageSize(1000,exrows=>{}).ExecuteCommand();
Split entity
[SplitTable(SplitType.Year)]//Table by year (the table supports year, quarter, month, week and day)[SugarTable("SplitTestTable_{year}{month}{day}")]publicclassSplitTestTable{[SugarColumn(IsPrimaryKey=true)]publiclongId{get;set;}publicstringName{get;set;}//When the sub-table field is inserted, which table will be inserted according to this field.//When it is updated and deleted, it can also be convenient to use this field to//find out the related table[SplitField]publicDateTimeCreateTime{get;set;}}
Split query
varlis2t=db.Queryable<OrderSpliteTest>().SplitTable(DateTime.Now.Date.AddYears(-1),DateTime.Now).ToPageList(1,2);
10.1 BulkCopydb.Fastest<Order>().BulkCopy(lstData);//insertdb.Fastest<Order>().PageSize(100000).BulkCopy(insertObjs);db.Fastest<System.Data.DataTable>().AS("order").BulkCopy(dataTable);10.2 BulkUpdatedb.Fastest<Order>().BulkUpdate(GetList())//updatedb.Fastest<Order>().PageSize(100000).BulkUpdate(GetList()) db.Fastest<Order>().BulkUpdate(GetList(),newstring[]{"Id"});//no primary keydb.Fastest<Order>().BulkUpdate(GetList(),newstring[]{"id"},newstring[]{"name","time"})//Set the updated column//DataTabledb.Fastest<System.Data.DataTable>().AS("Order").BulkUpdate(dataTable,"Id");//Id is primary keydb.Fastest<System.Data.DataTable>().AS("Order").BulkUpdate(dataTable,"Id",Setthe updated column);10.3 BulkMerge (5.1.4.109)db.Fastest<Order>().BulkMerge(List);db.Fastest<Order>().PageSize(100000).BulkMerge(List);10.4 BulkQuerydb.Queryable<Order>().ToList();//Slightly faster than Dapper//Suitable for big data exportList<Order>order=newList<Order>();db.Queryable<Order>().ForEach(it=>{order.Add(it);},2000);10.5 BulkDeletedb.Deleteable<Order>(list).PageSize(1000).ExecuteCommand();
About
.Net aot ORM SqlServer ORM Mongodb ORM MySql 瀚高 Postgresql ORM DB2 Hana 高斯 Duckdb C# VB.NET Sqlite ORM Oracle ORM Mysql Orm 虚谷数据库 达梦 ORM 人大金仓 ORM 神通ORM C# ORM , C# ORM .NET ORM NET9 ORM .NET8 ORM ClickHouse ORM QuestDb ,TDengine ORM,OceanBase ORM,GaussDB ORM,Tidb ORM Object/Relational Mapping
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.