1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/dotnetchina-SqlSugar

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Русский | Китайский

SqlSugar ORM

SqlSugar — это бесплатный открыто-источниковый ORM-фреймворк для .NET, поддерживающийся и обновляемый командой Fructose Big Data Technology. Самый простой в использовании ORM прямо из коробки.

Преимущества: [Минимальный код] [Высокая производительность] [Сверхпростота] [Полноценные возможности] [Поддержка нескольких баз данных] [Подходит для продуктов]

Поддержка .NET

.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, персонализированная база данных## Описание

  1. Полностью реализует нулевой ORM-построитель таблиц SQL, поддерживает индексы и операции CRUD
  2. Поддерживает запись, обновление, подтаблицы и миллионы больших данных в .NET с зрелыми решениями для статистики запросов
  3. Поддерживает полное приложение SaaS: многобазовый запрос, аудит, подбазы арендаторов, подтаблицы арендаторов и изоляцию данных арендаторов
  4. Поддерживает минимальный код + рабочие процессы (динамическое создание классов, динамическое создание таблиц, совместимость с CRUD для множества библиотек без сущностей, преобразование JSON в SQL, пользовательский XML и т. д.)
  5. Поддерживает ValueObject, дискриминатор, репозиторий, UnitOfWork, DbContext, AOP

Документация

Другое Выбор Вставка Обновление Удаление
NuGet Запрос Вставка Обновление Удаление

Начальный гайд | Запрос с соединением | Вставка без объекта | Обновление без объекта | Удаление без использования объекта | |Работа с несколькими базами данных | Запрос с включением|Вставка с включением| Обновление с включением| Удаление с включением |Документация на китайском языке|Запрос между базами данных|Вставка через JSON|Обновление через JSON|Удаление через JSON

Характеристика функциональности### Функция 1: Объединение запросов

Очень простой синтаксис запроса

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)

Функция 2: Включение в запрос, вставка, удаление и обновление


//Включение
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();          

Функция 3: Запрос пагинации

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();

Возможность 6: Шаблон одиночки

Реализация транзакций через методы

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();
}

Возможность 7: Фильтрация запросов

// Установка фильтра
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+'%')

Возможность 8: Вставка или обновление

вставка или обновление

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: Вставка или обновление больших данных

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 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
MIT
Отмена

Обновления (1)

все

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/dotnetchina-SqlSugar.git
git@api.gitlife.ru:oschina-mirror/dotnetchina-SqlSugar.git
oschina-mirror
dotnetchina-SqlSugar
dotnetchina-SqlSugar
master