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

OSCHINA-MIRROR/MuNet-agiledataaccess

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 16 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 16.03.2025 19:07 52c7e39

#АgilDataAccess Agil.DataAccess основан на расширении FluentData и предоставляет высокую производительность с простым в использовании API, поддерживающим доступ к различным популярным базам данных. На данный момент существуют ORM-фреймворки, такие как Entity Framework и NHibernate, которые слишком сложны и трудны для освоения. Кроме того, из-за абстрактного языка запросов этих фреймворков и сложностей при отображении данных из базы данных в объекты .NET, они генерируют низкое качество SQL.

Agil.DataAccess представляет собой легковесный фреймворк, использующий функциональный стиль программирования и простой API, который легко осваивается. Он также ориентирован на производительность и удобство использования, как это делается в других микро-ORM (например, Dapper и Massive). Этот фреймворк позволяет разработчикам иметь больше контроля над SQL-запросами, а не полностью полагаться на автоматическое создание SQL-запросов ORM. Он может использовать SQL для выполнения операций выборки, вставки и обновления, а также поддерживает использование хранимых процедур и транзакций. Это возможно без изменения существующей структуры и совместимо со всеми бизнес-объектами.

Вот некоторые другие характеристики Agil.DataAccess: - Поддержка множества наборов результатов (Multiple Result Sets): возможность получения нескольких наборов данных за одну операцию с базой данных;

  • Возможность работы с типизированными объектами или динамическими объектами;
  • Возможность создания пользовательских фабрик объектов (Custom Entity Factory) для сложных объектов, требующих специальной обработки при создании;
  • Возможность добавления поддержки новых баз данных.### Список поддерживаемых баз данных: MS SQL Server с помощью встроенного .NET драйвера. MS SQL Azure с помощью встроенного .NET драйвера. MS Access с помощью встроенного .NET драйвера. MS SQL Server Compact 4.0 драйвер. Oracle через ODP.NET драйвер. MySQL через MySQL Connector.NET драйвер. SQLite через SQLite ADO.NET Data Provider. PostgreSQL через Npgsql провайдер. IBM DB2 через IBM DB2 .NET драйвер. Sybase через Sybase провайдер.

Примеры API

Создание контекста базы данных

Вариант 1: Создание по умолчанию DataContext, используя ConnectionStrings["Default"]
var context = new Agile.DataAccess.DataContext();
Вариант 2: Создание DataContext из указанной строки подключения ConnectionStrings[название]
var context = new Agile.DataAccess.DataContext("Default");
Вариант 3: Создание DataContext из строки подключения базы данных и имени типа базы данных
var context = new Agile.DataAccess.DataContext("Data Source=. ;Initial Catalog=Agile;User Id=sa;Password=123;", "SqlServer");
Вариант 4: Создание DataContext из строки подключения базы данных и значения enum типа базы данных
var context = new Agile.DataAccess.DataContext("Data Source=. ;Initial Catalog=Agile;User Id=sa;Password=123;", DatabaseType.SqlServer);

Примеры выполнения T-SQL (скрипта)

Запрос возвращает список динамических объектов:

List<dynamic> products = Context.Script("SELECT * FROM Product").QueryMany<dynamic>();

Запрос возвращает список сильнотипизированных объектов:

List<Product> products = Context.Script("SELECT * FROM Product").QueryMany<Product>();

Запрос возвращает единственный динамический объект:```csharp динамический продукт = Контекст.Скрипт("SELECT * FROM Product WHERE ProductId = 1").QuerySingle<динамический>();


Запрос возвращает единственный сильнотипизированный объект:

```csharp
Product продукт = Контекст.Скрипт("SELECT * FROM Product WHERE ProductId = 1").QuerySingle<Product>();

Запрос возвращает таблицу данных:

DataTable продукты = Контекст.Скрипт("SELECT * FROM Product").QuerySingle<DataTable>();

Запрос возвращает скалярное значение:

int число = Контекст.Скрипт("SELECT COUNT(*) FROM Product").QuerySingle<int>();

Запрос возвращает список скалярных значений:

Список<int> productId = Контекст.Скрипт("SELECT ProductId FROM Product").QueryMany<int>();

Пользовательское соответствие сущностям:

Список<Product> продукты = Контекст.Скрипт(@"
    SELECT p.*, c.CategoryId AS Category__CategoryId,
           c.Name AS Category__Name
    FROM Product p
    JOIN Category c ON p.CategoryId = c.CategoryId")
                                .QueryMany<Product>();

Пользовательское отображение:

Список<Product> продукты = Контекст.Скрипт("SELECT * FROM Product").QueryMany<Product>(CustomMapperDynamic);
public void CustomMapperDynamic(Product продукт, динамический ряд) {
    продукт.ProductId = ряд.ProductId;
    продукт.Name = ряд.Name;
}

Пользовательское отображение с использованием DataReader:

Список<Product> продукты = Контекст.Скрипт("SELECT * FROM Product").QueryMany<Product>(CustomMapperDataReader);
public void CustomMapperDataReader(Product продукт, IDataReader ряд) {
    продукт.ProductId = ряд.GetSqlInt32("ProductId");
    продукт.Name = ряд.GetString("Name");
}

3. Применение параметров запроса (Параметры)

Метод 1:

динамический продукты = Контекст.Скрипт("SELECT * FROM Product WHERE ProductId = @0 OR ProductId = @1")
                            .Parameters(1, 2).QueryMany<динамический>();

Метод 2: (Именованные параметры)```csharp dynamic products = Context.Script("SELECT * FROM Product WHERE ProductId = @ProdId1 OR ProductId = @ProdId2") .Parameters(new { ProdId1 = 1, ProdId2 = 2 }).QueryMany();

Способ три: (вывод параметров)

var command = Context.Script("select @ProductName = Name from Product where ProductId=1")
                      .ParameterOut("ProductName", DataTypes.String, 100);
command.Execute();
string productName = command.ParameterValue<string>("ProductName");

Способ четыре: (входной параметр)

List<int> productIds = new List<int>() { 1, 2, 3 };
dynamic products = Context.Script("select * from Product where ProductId in (@ProductIds)")
                           .Parameter("ProductIds", productIds)
                           .QueryMany<dynamic>();

**Четвертый раздел: выбор данных (SELECT)**Выбор возвращает список объектов с динамической типизацией:

List<dynamic> products = Context.Select("Product").QueryMany<dynamic>();

Выбор возвращает список объектов с строгой типизацией:

List<Product> products = Context.Select("Product").QueryMany<Product>();

Выбор возвращает единственный динамический объект:

dynamic product = Context.Select("Product").Where("ProductId", 1).QuerySingle<dynamic>();

Выбор возвращает единственный объект с строгой типизацией:

Product product = Context.Select("Product").Where("ProductId", 1).QuerySingle<Product>();

Выбор возвращает таблицу данных:

DataTable product = Context.Select("Product").QuerySingle<DataTable>();

Автоматическое построение SQL:

Product product = Context.Select<Product>().Where("ProductId", 1).QuerySingle();
List<Product> products = Context.Select<Product>().QueryMany();

Пагинация запросов:

List<Product> products = Context.Builder<Product>()
                                .Select("p.*, c.Name as Category_Name")
                                .From("Product p Category c on c.CategoryId = p.CategoryId")
                                .Where("p.ProductId > 0 and p.Name is not null")
                                .OrderBy("p.Name")
                                .Paging(1, 10)
                                .QueryMany();
```**Пятый раздел: вставка данных (INSERT)**

Способ один:

Context.Script("insert into Product(Name, CategoryId) values(@0, @1)").Parameters("Way", 1).Execute();

Способ два:

Context.

Способ 3: (вставка данных с возвратом автоинкрементного первичного ключа)
```csharp
int productId = Context.Script("insert into Product(Name, CategoryId) values(@0, @1);")
                        .Parameters("Way", 1).ExecuteReturnLastId<int>();

Способ 4: (вставка данных с возвратом автоинкрементного первичного ключа)

int productId = Context.Script("insert into Product(Name, CategoryId) values(@Name, @CategoryId)")
                        .Parameter("Name", "Way")
                        .Parameter("CategoryId", 1)
                        .ExecuteReturnLastId<int>();

Способ 5: (автоматическое построение SQL)

Context.Insert("Product").Column("Name", "The Warren Buffet Way").Column("CategoryId", 1).Execute();

Способ 6: (автоматическое построение SQL)

Product product = new Product();
product.Name = "The Warren Buffet Way";
product.CategoryId = 1;
Context.Insert<Product>(product, "Product").AutoMap(x => x.ProductId).Execute();

**Шестой раздел: обновление данных (UPDATE)**Способ 1:

int rowsAffected = Context.Script("UPDATE Product SET Name = @0 WHERE ProductId = @1")
                            .Parameters("The Warren Buffet Way", 1).Execute();

Способ 2:

int rowsAffected = Context.Script("UPDATE Product SET Name = @Name WHERE ProductId = @ProductId")
                            .Parameter("Name", "The Warren Buffet Way")
                            .Parameter("ProductId", 1)
                            .Execute();

Способ 3:

int rowsAffected = Context.Update("Product")
                           .Column("Name", "The Warren Buffet Way")
                           .Where("ProductId", 1)
                           .Execute();

Способ 4: (автоматическое построение SQL)

int rowsAffected = Context.Update<Product>(product, "Product")
                           .AutoMap(x => x.ProductId)
                           .Where(x => x.ProductId)
                           .Execute();

Методы вставки или обновления:

var product = new Product();
product.Name = "The Warren Buffet Way";
product.CategoryId = 1;
var insertBuilder = Context.

**Седьмой раздел. Удаление данных (Delete)**Метод 1:

int rowsAffected = Context.Script("DELETE FROM Product WHERE ProductId = 1").Execute();

Метод 2:

int rowsAffected = Context.Script("DELETE FROM Product WHERE ProductId = @0").Parameters(1).Execute();

Метод 3:

int rowsAffected = Context.Script("DELETE FROM Product WHERE ProductId = @ProductId")
                          .Parameter("ProductId", 1).Execute();

Метод 4: (Автоматическое создание SQL)

int rowsAffected = Context.Delete("Product").Where("ProductId", 1).Execute();

Метод 5: (Автоматическое создание SQL)

int rowsAffected = Context.Delete<Product>(product, "Product")
                          .Where(x => x.ProductId).Execute();

Восьмой раздел. Проверка наличия записи (Exists)

Метод 1:

bool result = Context.Exists("Product").Where("ProductId", 1).Execute();

Метод 2:

bool result = Context.Exists<Product>(product, "Product")
                  .Where(x => x.ProductId).Execute();

Девятый раздел. Хранимые процедуры (Procedure)

Метод 1:

var rowsAffected = Context.Script("ProductUpdate")
                          .CommandType(DbCommandTypes.StoredProcedure)
                          .Parameter("ProductId", 1)
                          .Parameter("Name", "The Warren Buffet Way")
                          .Execute();

Метод 2:

var rowsAffected = Context.Procedure("ProductUpdate")
                          .Parameter("Name", "The Warren Buffet Way")
                          .Parameter("ProductId", 1).Execute();

Метод 3:

var command = Context.Procedure("ProductUpdate")
                     .ParameterOut("Number", DataTypes.Int16)
                     .Parameter("Name", "The Warren Buffet Way")
                     .Parameter("ProductId", 1);
int rowsAffected = command.Execute();
int number = command.ParameterValue<int>("Number");

Метод 4:

var rowsAffected = Context.

Пример 10:

Используя (var контекст = Контекст.BeginTransaction())
{
    контекст.Script("UPDATE Product SET Name = @0 WHERE ProductId = @1")
           .Parameters("The Warren Buffett Way", 1)
           .Execute();
}
``````markdown
    context.Update("Product")
             .Column("Name", "The Warren Buffett Way")
             .Where("ProductId", 1)
             .Execute();

    context.Update<Product>(product, "Product")
             .AutoMap(x => x.ProductId)
             .Where(x => x.ProductId)
             .Execute();

    context.Commit();
}

Ссылка на статью: http://www.cnblogs.com/MuNet/p/5740833.html


Опубликовать ( 0 )

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

1
https://api.gitlife.ru/oschina-mirror/MuNet-agiledataaccess.git
git@api.gitlife.ru:oschina-mirror/MuNet-agiledataaccess.git
oschina-mirror
MuNet-agiledataaccess
MuNet-agiledataaccess
master