SqlRepoEx — это облегчённая ORM. Максимальный размер основного ядра библиотеки SqlRepoEx.Core.dll составляет менее 160 КБ, а статической библиотеки SqlRepoEx.MsSql.Static.dll — всего 7 КБ.
SqlRepoEx решает проблему преобразования лямбда-выражений в SQL-запросы, избавляя от необходимости использовать строки для объединения SQL-запросов, что является скучным и подверженным ошибкам занятием.
В дополнение к реализации полного синтаксиса запросов Select, Insert, Update и Delete, SqlRepoEx также реализует синтаксис для подзапросов Select, Where и Order By. Эти запросы и подзапросы поддерживают экспорт SQL-кода, делая создание сложных SQL-запросов более простым.
SqlRepoEx предоставляет интерфейс IExecuteSqlStatement и его реализацию, позволяя добавлять нужные SQL-запросы с помощью метода WithSql и получать результаты через метод Go(), аналогично другим синтаксическим анализаторам запросов.
SqlRepoEx упрощает миграцию между диалектами SQL, такими как SQL Server и MySQL, устраняя необходимость учитывать, какая база данных используется. Достаточно всего двух строк кода, чтобы приложение работало без проблем.
SqlRepoEx работает быстро. По производительности он не уступает Dapper, и эти инструменты могут быть легко интегрированы друг с другом.
SqlRepoEx поддерживает диалекты SQL для SQL Server и MySQL и может быть объединён с другими инструментами доступа к данным, такими как Dapper, для работы с большинством баз данных.
Фактически, SqlRepoEx преобразует лямбда-выражения в SQL-код, позволяя использовать любой инструмент ORM, который поддерживает SQL, для доступа к нужным данным.
SqlRepoEx поддерживает множество сложных конструкций SQL, таких как Union и Join, а также позволяет выражать более сложные типы результатов с помощью простых объединений по ключевым словам.
SqlRepoEx неинвазивен и требует лишь нескольких простых функций для связывания классов с базой данных, избегая сложных конфигураций XML и JSON. Если конфигурация всё же требуется, она ограничивается строками подключения к базе данных в конфигурационных файлах или может быть задана непосредственно в коде, в зависимости от используемого поставщика данных.
Для разработчиков на C#, SqlRepoEx прост в использовании благодаря своей схожести с Linq to SQL, но не зависит от структуры базы данных.
Большинство типов в SqlRepoEx являются перестраиваемыми и расширяемыми (например, SqlRepoEx.Adapter.Dapper представляет собой простое, но мощное расширение).
NuGet library, которую можно добавить в проект:
Этот проект является результатом вторичной разработки на основе SqlRepo. Он решает следующие проблемы:
Пример использования:
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 )