Русский | Китайский
SqlSugar — это бесплатный открыто-источниковый ORM-фреймворк для .NET, поддерживающийся и обновляемый командой Fructose Big Data Technology. Самый простой в использовании ORM прямо из коробки.
Преимущества: [Минимальный код] [Высокая производительность] [Сверхпростота] [Полноценные возможности] [Поддержка нескольких баз данных] [Подходит для продуктов]
.NET Framework, .NET Core 3.1, .NET 5, .NET 6, .NET 7, .NET 8, .NET 9, .NET 10
MySQL, SQL Server, SQLite, Oracle, PostgreSQL, Damien, Zhongzhiang (рекомендованное китайское решение), Shengtong, Hanyao, Access, OceanBase, TDengine, QuestDB, ClickHouse, MySqlConnector, Huawei GaussDB, Nanjing University General GBase, MariaDB, TiDB, ODBC, Percona Server, Amazon Aurora, Azure Database for MySQL, Google Cloud SQL for MySQL, персонализированная база данных## Описание
Другое | Выбор | Вставка | Обновление | Удаление |
---|---|---|---|---|
NuGet | Запрос | Вставка | Обновление | Удаление |
Начальный гайд | Запрос с соединением | Вставка без объекта | Обновление без объекта | Удаление без использования объекта | |Работа с несколькими базами данных | Запрос с включением|Вставка с включением| Обновление с включением| Удаление с включением |Документация на китайском языке|Запрос между базами данных|Вставка через JSON|Обновление через JSON|Удаление через JSON
Очень простой синтаксис запроса
var query = 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) => new ViewOrder { Id = o.Id, CustomName = cus.Name })
.ToList();
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)
//Включение
var list = db.Queryable<Test>()
.Includes(x => x.Provinces, x => x.Citys, x => x.Street) //множественное включение уровней
.Includes(x => x.ClassInfo)
.ToList();
//Включение + левое объединение
var list5 = 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) => new Student_004DTO
{
SchoolId = x.SchoolId,
Books = x.books,
School_001 = x.school_001,
Name = y.Name
})
.ToList();
int pageIndex = 1;
int pageSize = 20;
int totalCount = 0;
var page = db.Queryable<Student>().ToPageList(pageIndex, pageSize, ref totalCount);
var names = new string[] { "a", "b" };
Expressionable<Order> exp = new Expressionable<Order>();
foreach (var item in names)
{
exp.Or(it => it.Name.Contains(item));
}
var list = db.Queryable<Order>().Where(exp.ToExpression()).ToList();
SELECT [Id], [Name], [Price], [CreateTime], [CustomId]
FROM [Order]
WHERE (
([Name] LIKE '%' + CAST(@MethodConst0 AS NVARCHAR(MAX)) + '%') OR
([Name] LIKE '%' + CAST(@MethodConst1 AS NVARCHAR(MAX)) + '%')
)
```### Многоподписочная транзакция
```cs
// Создание объекта базы данных
SqlSugarClient db = new SqlSugarClient(new List<ConnectionConfig>()
{
new ConnectionConfig() { ConfigId = "0", DbType = DbType.SqlServer, ConnectionString = Config.ConnectionString, IsAutoCloseConnection = true },
new ConnectionConfig() { ConfigId = "1", DbType = DbType.MySql, ConnectionString = Config.ConnectionString4, IsAutoCloseConnection = true }
});
``````md
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<Order>().ToList();
sqlServerdb.Queryable<Order>().ToList();
db.CommitTran();
Реализация транзакций через методы
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();
}
// Установка фильтра
db.QueryFilter.Add(new TableFilterItem<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+'%')
вставка или обновление
Db.Storageable(list2).ExecuteCommand();
Db.Storageable(list2).PageSize(1000).ExecuteCommand();
Db.Storageable(list2).PageSize(1000, exrows => { }).ExecuteCommand();
```### Возможность 9: Автоматическое разделение таблицы
Разделение сущности
```cs
[SplitTable(SplitType.Year)] //Таблица по годам (таблица поддерживает годы, кварталы, месяцы, недели и дни)
[SugarTable("SplitTestTable_{year}{month}{day}")]
public class SplitTestTable
{
[SugarColumn(IsPrimaryKey = true)]
public long Id { get; set; }
public string Name { get; set; }
//При вставке значения поля подтаблицы, в какую таблицу будет выполнена вставка согласно этому полю.
//При обновлении и удалении также удобно использовать это поле для выявления связанной таблицы
[SplitField]
public DateTime CreateTime { get; set; }
}
Запрос разделения
var list2 = db.Queryable<OrderSpliteTest>()
.SplitTable(DateTime.Now.Date.AddYears(-1), DateTime.Now)
.ToPageList(1, 2);
10.1 BulkCopy
db.Fastest<Order>().BulkCopy(lstData); //вставка
db.Fastest<Order>().PageSize(100000).BulkCopy(insertObjs);
db.Fastest<System.Data.DataTable>().AS("order").BulkCopy(dataTable);
10.2 BulkUpdate
db.Fastest<Order>().BulkUpdate(GetList()); //обновление
db.Fastest<Order>().PageSize(100000).BulkUpdate(GetList());
db.Fastest<Order>().BulkUpdate(GetList(), new string[] {"Id"}); //нет первичного ключа
db.Fastest<Order>().BulkUpdate(GetList(), new string[] {"id"},
new string[] {"name", "time"}); //Установка обновляемых столбцов
//DataTable
db.Fastest<System.Data.DataTable>().AS("Order").BulkUpdate(dataTable, "Id"); //Id - первичный ключ
db.Fastest<System.Data.DataTable>().AS("Order").BulkUpdate(dataTable, "Id", Установка обновляемых столбцов);
10.3 BulkMerge (5.1.4.109)
db.Fastest<Order>().BulkMerge(List);
db.Fastest<Order>().PageSize(100000).BulkMerge(List);
```10.4 BulkQuery
db.Queryable<Order>().ToList(); // Незначительно быстрее чем Dapper
// Подходит для экспорта больших данных
List<Order> order = new List<Order>();
db.Queryable<Order>().ForEach(it => { order.Add(it); }, 2000);
10.5 BulkDelete
db.Deleteable<Order>(list).PageSize(1000).ExecuteCommand();
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )