#А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): возможность получения нескольких наборов данных за одну операцию с базой данных;
DataContext
, используя ConnectionStrings["Default"]var context = new Agile.DataAccess.DataContext();
DataContext
из указанной строки подключения ConnectionStrings[название]var context = new Agile.DataAccess.DataContext("Default");
DataContext
из строки подключения базы данных и имени типа базы данныхvar context = new Agile.DataAccess.DataContext("Data Source=. ;Initial Catalog=Agile;User Id=sa;Password=123;", "SqlServer");
DataContext
из строки подключения базы данных и значения enum типа базы данныхvar context = new Agile.DataAccess.DataContext("Data Source=. ;Initial Catalog=Agile;User Id=sa;Password=123;", DatabaseType.SqlServer);
Запрос возвращает список динамических объектов:
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");
}
Метод 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 )