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

OSCHINA-MIRROR/mirrors-chloe-orm

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Chloe

Chloe — это облегчённая библиотека объектно-реляционного отображения (ORM).

Интерфейс запроса похож на LINQ. С помощью Chloe.ORM можно запрашивать данные, как в LINQ, и выполнять любые действия (объединение запросов, групповые запросы, агрегатные запросы, вставка, пакетное обновление, пакетное удаление, сегментирование) с использованием лямбда-выражений.

Документация: https://github.com/shuxinqin/Chloe/wiki

Команда установки NuGet

База данных Команда установки
SqlServer Install-Package Chloe.SqlServer
MySql Install-Package Chloe.MySql
Oracle Install-Package Chloe.Oracle
SQLite Install-Package Chloe.SQLite
PostgreSQL Install-Package Chloe.PostgreSQL
达梦 Install-Package Chloe.Dameng
人大金仓 Install-Package Chloe.KingbaseES

Лицензия

Лицензия MIT

Использование

  • Entity
public enum Gender
{
    Male = 1,
    Female
}

[Table("Users")]
public class User
{
    [Column(IsPrimaryKey = true)]
    [AutoIncrement]
    public int Id { get; set; }
    public string Name { get; set; }
    public Gender? Gender { get; set; }
    public int? Age { get; set; }
    public int? CityId { get; set; }
    public DateTime? OpTime { get; set; }
}

public class City
{
    [Column(IsPrimaryKey = true)]
    public int Id { get; set; }
    public string Name { get; set; }
    public int ProvinceId { get; set; }
}

public class Province
{
    [Column(IsPrimaryKey = true)]
    public int Id { get; set; }
    public string Name { get; set; }
}
  • DbContext
IDbContext context = new MsSqlContext(DbHelper.ConnectionString);
IQuery<User> q = context.Query<User>();
  • Запрос
IQuery<User> q = context.Query<User>();
q.Where(a => a.Id > 0).FirstOrDefault();
q.Where(a => a.Id > 0).ToList();
q.Where(a => a.Id > 0).OrderBy(a => a.Age).ToList();
q.Where(a => a.Id > 0).Take(10).OrderBy(a => a.Age).ToList();

q.Where(a => a.Id > 0).OrderBy(a => a.Age).ThenByDesc(a => a.Id).Select(a => new { a.Id, a.Name }).Skip(20).Take(10).ToList();
/*
 * SELECT TOP (10) [T].[Id] AS [Id],[T].[Name] AS [Name] FROM (SELECT [Users].[Id] AS [Id],[Users].[Name] AS [Name],ROW_NUMBER() OVER(ORDER BY [Users].[Age] ASC,[Users].[Id] DESC) AS [ROW_NUMBER_0] FROM [Users] AS [Users] WHERE [Users].[Id] > 0) AS [T] WHERE [T].[ROW_NUMBER_0] > 20
 */

q.Where(a => a.Id > 0).Where(a => a.Name.Contains("lu")).ToList();
/*
 * SELECT [Users].[Id] AS [Id],[Users].[Name] AS [Name],[Users].[Gender] AS [Gender],[Users].[Age] AS [Age],[Users].[CityId] AS [CityId],[Users].[OpTime] AS [OpTime] 
 * FROM [Users] AS [Users] 
 * WHERE ([Users].[Id] > 0 AND [Users].[Name] LIKE '%' + N'lu' + '%')
 */
  • Объединение запросов
MsSqlContext context = new MsSqlContext(DbHelper.ConnectionString);

var user_city_province = context.Query<User>()
                         .InnerJoin<City>((user, city) => user.CityId == city.Id)
                         .InnerJoin<Province>((user, city, province) => city.ProvinceId == province.Id);

user_city_province.Select((user, city, province) => new { UserId = user.Id, CityName = city.Name, ProvinceName = province.Name }).Where(a => a.UserId == 1).ToList();
/*
 * SELECT [Users].[Id] AS [UserId],[City].[Name] AS [CityName],[Province].[Name] AS [ProvinceName] 
 * FROM [Users] AS [Users] 
 * INNER JOIN [City] AS [City] ON [Users].[CityId] = [City].[Id] 
 * INNER JOIN [Province] AS [Province] ON [City].[ProvinceId] = [Province].[Id] 
 * WHERE [Users].[Id] = 1
 */
 
var view = user_city_province.Select((user, city, province) => new { User = user, City = city, Province = province });
 
view.Where(a => a.User.Id == 1).ToList();
/*
 * SELECT [Users].[Id] AS [Id],[Users].[Name] AS [Name],[Users].[Gender] AS [Gender],[Users].[Age] AS [Age],[Users].[CityId] AS [CityId],[Users].[OpTime] AS [OpTime],[City].[Id] AS [Id0],[City].[Name] AS [Name0],[City].[ProvinceId] AS [ProvinceId],[Province].[Id] AS [Id1],[Province].[Name] AS [Name1] 
 * FROM [Users] AS [Users] 
 * INNER JOIN [City] AS [City] ON [Users].[CityId] =
``` Данный текст написан на языке C#.

В запросе представлен код, который выполняет различные операции с данными в базе данных. В тексте используются запросы LINQ для выборки данных из таблиц Users, City и Province. Также представлены примеры использования различных методов запросов, таких как Where, GroupBy, Having, Select, Count, Sum, Max, Min, Average и других.

**Пример запроса:**

```C#
IQuery<User> q = context.Query<User>();

IGroupingQuery<User> g = q.Where(a => a.Id > 0).GroupBy(a => a.Age);
g = g.Having(a => a.Age > 1 && Sql.Count() > 0);

g.Select(a => new { a.Age, Count = Sql.Count(), Sum = Sql.Sum(a.Age), Max = Sql.Max(a.Age), Min = Sql.Min(a.Age), Avg = Sql.Average(a.Age) }).ToList();

Этот запрос выбирает пользователей с идентификатором больше нуля, группирует их по возрасту, фильтрует группы по условию (возраст больше единицы и количество элементов в группе больше нуля), а затем выбирает возраст, количество, сумму, максимум, минимум и среднее значение возраста для каждой группы. DiffMinutes = Sql.DiffMinutes(startTime, endTime), // DATEDIFF(MINUTE,@P_0,@P_1)

DiffSeconds = Sql.DiffSeconds(startTime, endTime), // DATEDIFF(SECOND,@P_0,@P_1)

DiffMilliseconds = Sql.DiffMilliseconds(startTime, endTime), // DATEDIFF(MILLISECOND,@P_0,@P_1)

// DiffMicroseconds = Sql.DiffMicroseconds(startTime, endTime), // DATEDIFF(MICROSECOND,@P_0,@P_1) Exception

AddYears = startTime.AddYears(1), // DATEADD(YEAR,1,@P_0)

AddMonths = startTime.AddMonths(1), // DATEADD(MONTH,1,@P_0)

AddDays = startTime.AddDays(1), // DATEADD(DAY,1,@P_0)

AddHours = startTime.AddHours(1), // DATEADD(HOUR,1,@P_0)

AddMinutes = startTime.AddMinutes(2), // DATEADD(MINUTE,2,@P_0)

AddSeconds = startTime.AddSeconds(120), // DATEADD(SECOND,120,@P_0)

AddMilliseconds = startTime.AddMilliseconds(20000), // DATEADD(MILLISECOND,20000,@P_0)

Now = DateTime.Now, // GETDATE()

UtcNow = DateTime.UtcNow, // GETUTCDATE()

Today = DateTime.Today, // CAST(GETDATE() AS DATE)

Date = DateTime.Now.Date, // CAST(GETDATE() AS DATE)

Year = DateTime.Now.Year, // DATEPART(YEAR,GETDATE())

Month = DateTime.Now.Month, // DATEPART(MONTH,GETDATE())

Day = DateTime.Now.Day, // DATEPART(DAY,GETDATE())

Hour = DateTime.Now.Hour, // DATEPART(HOUR,GETDATE())

Minute = DateTime.Now.Minute, // DATEPART(MINUTE,GETDATE())

Second = DateTime.Now.Second, // DATEPART(SECOND,GETDATE())

Millisecond = DateTime.Now.Millisecond, // DATEPART(MILLISECOND,GETDATE())

DayOfWeek = DateTime.Now.DayOfWeek, // (DATEPART(WEEKDAY,GETDATE()) - 1)

Int_Parse = int.Parse("1"), // CAST(N'1' AS INT)

Int16_Parse = Int16.Parse("11"), // CAST(N'11' AS SMALLINT)

Long_Parse = long.Parse("2"), // CAST(N'2' AS BIGINT)

Double_Parse = double.Parse("3"), // CAST(N'3' AS FLOAT)

Float_Parse = float.Parse("4"), // CAST(N'4' AS REAL)

Guid_Parse = Guid.Parse("D544BC4C-739E-4CD3-A3D3-7BF803FCE179"), // CAST(N'D544BC4C-739E-4CD3-A3D3-7BF803FCE179' AS UNIQUEIDENTIFIER) AS [Guid_Parse]

Bool_Parse = bool.Parse("1"), // CASE WHEN CAST(N'1' AS BIT) = CAST(1 AS BIT) THEN CAST(1 AS BIT) WHEN NOT (CAST(N'1' AS BIT) = CAST(1 AS BIT)) THEN CAST(0 AS BIT) ELSE NULL END AS [Bool_Parse]

DateTime_Parse = DateTime.Parse("1949-10-01"), // CAST(N'1949-10-01' AS DATETIME) AS [DateTime_Parse]

B = a.Age == null ? false : a.Age > 1

  • Вставка:

IDbContext context = new MsSqlContext(DbHelper.ConnectionString);

int id = (int)context.Insert(() => new User() { Name = "lu", Age = 18, Gender = Gender.Male, CityId = 1, OpTime = DateTime.Now });

User user = new User(); user.Name = "lu"; user.Age = 18; user.Gender = Gender.Male; user.CityId = 1; user.OpTime = new DateTime(1970, 1, 1);

user = context.Insert(user);

MsSqlContext context = new MsSqlContext(DbHelper.ConnectionString);

context.Update(a => a.Id == 1, a => new User() { Name = a.Name, Age = a.Age + 1, Gender = Gender.Male, OpTime = DateTime.Now });

context.Update(a => a.Gender == Gender.Woman, a => new User() { Age = a.Age - 1, OpTime = DateTime.Now });

User user = new User(); user.Id = 1; user.Name = "lu"; user.Age = 28; user.Gender = Gender.Male; user.OpTime = DateTime.Now;

context.Update(user); //update all columns

В запросе представлен код на языке C#, в котором используются методы работы с данными и объектами модели. В тексте запроса также присутствуют фрагменты кода, связанные с использованием SQL-запросов для работы с базами данных.

К сожалению, без контекста сложно понять, что именно делает этот код. Но можно предположить, что он связан с созданием и обновлением объектов модели, а также с выполнением SQL-запросов к базе данных. 28;

Nullable @P_3 = NULL; DateTime @P_4 = "2016/7/8 11:28:27"; Int32 @P_5 = 1; UPDATE [Users] SET [Name]=@P_0,[Gender]=@P_1,[Age]=@P_2,[CityId]=@P_3,[OpTime]=@P_4 WHERE [Users].[Id] = @P_5

  • Обновление

context.TrackEntity(user);//отслеживание сущности user.Name = user.Name + "1"; context.Update(user);//обновление столбца «Имя»

/*

  • String @P_0 = "lu1"; Int32 @P_1 = 1; UPDATE [Users] SET [Name]=@P_0 WHERE [Users].[Id] = @P_1 */

  • Delete

MsSqlContext context = new MsSqlContext(DbHelper.ConnectionString);

context.Delete(a => a.Id == 1); /*

  • DELETE [Users] WHERE [Users].[Id] = 1 */

context.Delete(a => a.Gender == null); /*

  • DELETE [Users] WHERE [Users].[Gender] IS NULL */

User user = new User(); user.Id = 1; context.Delete(user); /*

  • Int32 @P_0 = 1; DELETE [Users] WHERE [Users].[Id] = @P_0 */

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

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

Введение

Лёгкий и эффективный .NET C# фреймворк доступа к данным (ORM). Развернуть Свернуть
MIT
Отмена

Обновления

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

Участники

все

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

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