Перевод текста на русский язык:
SQLBuilder.Core
Изображение:
<p></p>
<p align="center">
<img src="https://gitee.com/zqlovejyc/SQLBuilder.Core/raw/master/SQLBuilder.Core/Icon/sql.png" height="80"/>
</p>
Центрированные элементы:
<div align="center">
[](https://gitee.com/zqlovejyc/SQLBuilder/stargazers) [](https://gitee.com/zqlovejyc/SQLBuilder/members) [](https://github.com/zqlovejyc/SQLBuilder/stargazers) [](https://github.com/zqlovejyc/SQLBuilder/network) [](https://github.com/zqlovejyc/SQLBuilder/blob/master/LICENSE) [](https://www.nuget.org/packages//Zq.SQLBuilder)
</div>
Слева:
.NET Framework 4.5 версии Expression выражения преобразуются в SQL-запросы, поддерживаются SqlServer, MySql, Oracle, Sqlite, PostgreSql; на основе Dapper реализованы соответствующие репозитории для данных в базах данных;
Пакет | Имя | Версия | Описание |
---|---|---|---|
Zq.SQLBuilder | Основной пакет SQLBuilder | ||
Zq.SQLBuilder.Diagnostics | Пакет расширения диагностики SQLBuilder |
//Добавление
await _repository.InsertAsync(entity);
//Пакетное добавление
await _repository.InsertAsync(entities);
//Добавление с использованием SQLBuilder
await SqlBuilder
.Insert<MsdBoxEntity>(() =>
entity)
.ExecuteAsync(
_repository);
//Пакетное добавление с использованием SQLBuilder
await SqlBuilder
.Insert<MsdBoxEntity>(() =>
new[]
{
new UserInfo { Name = "张三", Sex = 2 },
new UserInfo { Name = "张三", Sex = 2 }
})
.ExecuteAsync(
_repository);
//Удаление
await _repository.DeleteAsync(entity);
//Пакетное удаление
await _repository.DeleteAsync(entitties);
//Условное удаление
await _repository.DeleteAsync<MsdBoxEntity>(x => x.Id == "1");
//Удаление с использованием SQLBuilder
await SqlBuilder
.Delete<MsdBoxEntity>()
.Where(x =>
x.Id == "1")
.ExecuteAsync(
_repository);
//Первичный ключ удаления
await SqlBuilder
.Delete<MsdBoxEntity>()
.WithKey("1")
.ExecuteAsync(
_repository);
//Обновление
await _repository.UpdateAsync(entity);
//Пакетное обновление
await _repository.UpdateAsync(entities);
//Условное обновление
await _repository.UpdateAsync<MsdBoxEntity>(x => x.Id == "1", () => entity);
//Обновление с использованием SQLBuilder
await SqlBuilder
.Update<MsdBoxEntity>(() =>
entity,
DatabaseType.MySql,
isEnableFormat:true)
.Where(x =>
x.Id == "1")
.ExecuteAsync(
_repository);
//Простой запрос
await _repository.FindListAsync<MsdBoxEntity>(x => x.Id == "1");
//Соединённый запрос
await SqlBuilder
.Select<UserInfo, UserInfo, Account, Student, Class, City, Country>((u, t, a, s, d, e, f) =>
new { u.Id, UId = t.Id, a.Name, StudentName = s.Name, ClassName = d.Name, e.CityName, CountryName = f.Name })
``` **Текст запроса представляет собой фрагмент кода на языке C#.**
В запросе содержатся фрагменты кода, которые представляют собой запросы к базе данных с использованием LINQ и различных методов работы с данными. Также в запросе есть код, который демонстрирует использование IOC-контейнера для внедрения зависимостей.
**Точный перевод текста невозможен, так как он содержит множество технических терминов и конструкций, специфичных для разработки программного обеспечения.** Однако можно сделать общий перевод, который будет понятен специалистам в данной области:
Запрос представляет собой набор инструкций по работе с базой данных, включая запросы с использованием LINQ, а также примеры использования IOC-контейнеров для внедрения зависимостей между компонентами системы. **executeError: msg => Console.WriteLine(msg.Exception?.Message),
executeDispose: msg => Console.WriteLine(msg.MasterConnection.State),
disposeError: msg => Console.WriteLine(msg.Exception?.Message));**
var container = builder.Build();
var repo = container.Resolve<Func<string, IRepository>>()(null);
var res = repo.Any<Log>(x => x.Id == 2633);
### ⚙ Конфигурация базы данных
```csharp
//appSettings
<add key="ConnectionStrings" value="{'Base':['SqlServer','Server=.;Database=TestDb;Uid=test;Pwd=123;'],'OracleDb':['Oracle','строка подключения к базе данных'],'MySqlDb':['MySql','строка подключения к базе данных'],'SqliteDb':['Sqlite','строка подключения к базе данных'],'PgsqlDb':['PostgreSql','строка подключения к базе данных']}" />
//connectionStrings
<add name="ConnectionStrings" connectionString="{'Base':['SqlServer','Server=.;Database=TestDb;Uid=test;Pwd=123;'],'OracleDb':['Oracle','строка подключения к базе данных'],'MySqlDb':['MySql','строка подключения к базе данных'],'SqliteDb':['Sqlite','строка подключения к базе данных'],'PgsqlDb':['PostgreSql','строка подключения к базе данных']}"/>
//Способ один
IRepository trans = null;
try
{
//Начать транзакцию
trans = _repository.BeginTransaction();
//Операция записи в базу данных
await trans.InsertAsync(entity);
//Зафиксировать транзакцию
trans.Commit();
}
catch (Exception)
{
//Откатить транзакцию
trans?.Rollback();
throw;
}
//Способ два
var res = await _repository.ExecuteTransactionAsync(async trans =>
{
var retval = (await trans.InsertAsync(entity)) > 0;
if (input.Action.EqualIgnoreCase(UnitAction.InDryBox))
code = await _unitInfoService.InDryBoxAsync(dryBoxInput);
else
code = await _unitInfoService.OutDryBoxAsync(dryBoxInput);
return code == ErrorCode.Successful && retval;
});
### 📯 Хранилище + переключение между базами данных
```csharp
private readonly Func<string, IRepository> _handler;
private readonly IRepository _repository;
public MyService(Func<string, IRepository> hander)
{
_handler = hander;
//По умолчанию базовое хранилище данных
_repository = hander(null);
}
//Базовое хранилище
var baseRepository = _handler("Base");
//Cap хранилище
var capRepository = _handler("Cap");
//Способ один
_repository.Master = false;
//Способ два
_repository.UseMasterOrSlave(master)
SQLBuilder
следует лицензии с открытым исходным кодом Apache-2.0
, приглашаем всех внести свой вклад через PR
или Issue
.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )