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

OSCHINA-MIRROR/azthinker-SqlRepoEx

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md
  1. SqlRepoEx — это облегчённая ORM. Максимальный размер основного ядра библиотеки SqlRepoEx.Core.dll составляет менее 160 КБ, а статической библиотеки SqlRepoEx.MsSql.Static.dll — всего 7 КБ.

  2. SqlRepoEx решает проблему преобразования лямбда-выражений в SQL-запросы, избавляя от необходимости использовать строки для объединения SQL-запросов, что является скучным и подверженным ошибкам занятием.

  3. В дополнение к реализации полного синтаксиса запросов Select, Insert, Update и Delete, SqlRepoEx также реализует синтаксис для подзапросов Select, Where и Order By. Эти запросы и подзапросы поддерживают экспорт SQL-кода, делая создание сложных SQL-запросов более простым.

  4. SqlRepoEx предоставляет интерфейс IExecuteSqlStatement и его реализацию, позволяя добавлять нужные SQL-запросы с помощью метода WithSql и получать результаты через метод Go(), аналогично другим синтаксическим анализаторам запросов.

  5. SqlRepoEx упрощает миграцию между диалектами SQL, такими как SQL Server и MySQL, устраняя необходимость учитывать, какая база данных используется. Достаточно всего двух строк кода, чтобы приложение работало без проблем.

  6. SqlRepoEx работает быстро. По производительности он не уступает Dapper, и эти инструменты могут быть легко интегрированы друг с другом.

  7. SqlRepoEx поддерживает диалекты SQL для SQL Server и MySQL и может быть объединён с другими инструментами доступа к данным, такими как Dapper, для работы с большинством баз данных.

  8. Фактически, SqlRepoEx преобразует лямбда-выражения в SQL-код, позволяя использовать любой инструмент ORM, который поддерживает SQL, для доступа к нужным данным.

  9. SqlRepoEx поддерживает множество сложных конструкций SQL, таких как Union и Join, а также позволяет выражать более сложные типы результатов с помощью простых объединений по ключевым словам.

  10. SqlRepoEx неинвазивен и требует лишь нескольких простых функций для связывания классов с базой данных, избегая сложных конфигураций XML и JSON. Если конфигурация всё же требуется, она ограничивается строками подключения к базе данных в конфигурационных файлах или может быть задана непосредственно в коде, в зависимости от используемого поставщика данных.

  11. Для разработчиков на C#, SqlRepoEx прост в использовании благодаря своей схожести с Linq to SQL, но не зависит от структуры базы данных.

  12. Большинство типов в SqlRepoEx являются перестраиваемыми и расширяемыми (например, SqlRepoEx.Adapter.Dapper представляет собой простое, но мощное расширение).

NuGet library, которую можно добавить в проект:

  • SqlRepoEx.Adapter.Dapper;
  • SqlRepoEx.MsSql.Static;
  • SqlRepoEx.MsSql.Autofac;
  • SqlRepoEx.MsSql.ServiceCollection;
  • SqlRepoEx.MySql.Static;
  • SqlRepoEx.MySql.ServiceCollection;
  • SqlRepoEx.MySql.Autofac.

Этот проект является результатом вторичной разработки на основе SqlRepo. Он решает следующие проблемы:

  • ошибки при отсутствии Where-подзапроса при использовании методов, отличных от Where;
  • проблемы с объединением нескольких условий в Where-запросе;
  • ограничение операций только экземплярами с обязательным полем Id при автоинкременте.

Пример использования:

IRepository<ToDo> repository = repositoryFactory.Create<ToDo>();
var results = repository.Query()
    .Select(e => e.Id, e => e.Task, e => e.CreatedDate);
results = results.Where(e => e.IsCompleted == false);
results = results.Where(e => e.Id == 3);

До изменений генерировался следующий SQL-запрос:

SELECT [dbo].[ToDo].[Id]
, [dbo].[ToDo].[Task]
, [dbo].[ToDo].[CreatedDate]
FROM [dbo].[ToDo]
WHERE ([dbo].[ToDo].[IsCompleted] = 0)
WHERE ([dbo].[ToDo].[Id] = 3);

После изменений:

SELECT [dbo].[ToDo].[Id]
, [dbo].[ToDo].[Task]
, [dbo].[ToDo].[CreatedDate]
FROM [dbo].[ToDo]
WHERE ([dbo].[ToDo].[IsCompleted] = 0)
And ([dbo].[ToDo].[Id] = 3);

Также можно указать неавтоинкрементное поле:

var repository = this.repositoryFactory.Create<DoitTest>();
DoitTest doitTest = new DoitTest();
doitTest.TestRmk = "测试";
doitTest.TestBool = true;
doitTest.TestId = 123;
Console.WriteLine(repository.Insert().UsingIdField(d => d.TestId, false).For(doitTest).Sql());

Генерируется следующий SQL:

INSERT [dbo].[DoitTest]([TestId], [TestRmk], [TestBool])
VALUES(123, '测试', 1);

При указании неавтоинкрементного поля:

var repository = this.repositoryFactory.Create<DoitTest>();
DoitTest doitTest = new DoitTest();

doitTest.TestRmk = "测试";
doitTest.TestBool = true;
doitTest.TestId = 123;
Console.WriteLine(repository.Insert().UsingIdField(d => d.TestId).For(doitTest).Sql());

генерируется следующий SQL:

INSERT [dbo].[DoitTest]([TestRmk], [TestBool])
VALUES('测试', 1);
SELECT *
FROM [dbo].[DoitTest]
WHERE [TestId] = SCOPE_IDENTITY();
``` ```
SELECT [dbo].[ToDo].[CreatedDate]
FROM [dbo].[ToDo]
WHERE [dbo].[ToDo].[IsCompleted] = 0;
var repository = RepoFactory.Create<ToDo>();
var results = repository.Query()
    .Select(e => e.Id, e => e.Task, e => e.CreatedDate)
    .OrderBy(e => e.Id)
    .Page(10, 3)
    .Go();

Комментарии ( 0 )

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

Введение

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

Обновления

Пока нет обновлений

Участники

все

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

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