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, SqlServer, Sqlite, Oracle, postgresql, Damien, Zhongjian (рекомендуется для китайского рынка), Shengtong, Hanggao, Access, DB2, DuckDb, Hana, OceanBase, TDengine, QuestDb, Clickhouse, MySqlConnector, Huawei GaussDB, Nanjing University of Science and Technology GBase, MariaDB, TiDB, Odbc, Percona Server, Amazon Aurora, Azure Database for MySQL, Google Cloud SQL for MySQL, custom database## Описание

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

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

Другое Выбор Вставка Обновление Удаление
Nuget Запрос Вставка Обновление Удаление
Начальный гайд Запрос с соединением Вставка без сущности Обновление без сущности Удаление без сущности
Работа с несколькими базами данных Запрос с соединением com/DotNetNext/SqlSugar/wiki/1. 6-Query%E2%80%90Include">Запрос с включением Вставка с включением Обновление с включением
Китайская документация Запрос между базами данных Вставка по 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)

Функция 2: Запрос Include, вставка, удаление и обновление


//Include
var list = db.Queryable<Test>()
              .Includes(x => x.Provinces, x => x.Citys, x => x.Street) //множественный уровень
              .Includes(x => x.ClassInfo) 
              .ToList();

//Include + left join        
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.ToString()));
}
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)) + '%')
)

Возможность многоснимочной транзакции

// Создание объекта базы данных
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}
});
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: Паттерн Singleton

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

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: Автоматическое разделение таблицы

Разделение сущности

[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; }
}Split запрос
```cs
var list = 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", Set the updated column);

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 )

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

Введение

Описание недоступно Развернуть Свернуть
C# и 2 других языков
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