QLimitive 0.1.4

dotnet add package QLimitive --version 0.1.4                
NuGet\Install-Package QLimitive -Version 0.1.4                
该命令旨在在 Visual Studio 的包管理器控制台中使用,因为它使用了 NuGet 模块的 Install-Package 版本。
<PackageReference Include="QLimitive" Version="0.1.4" />                
对于支持 PackageReference 的项目,将此 XML 节点复制到项目文件以引用包。
paket add QLimitive --version 0.1.4                
#r "nuget: QLimitive, 0.1.4"                
#r 指令可在 F# Interactive 和 Polyglot Notebooks 中使用。将其复制到交互式工具或脚本的源代码中以引用包。
// Install QLimitive as a Cake Addin
#addin nuget:?package=QLimitive&version=0.1.4

// Install QLimitive as a Cake Tool
#tool nuget:?package=QLimitive&version=0.1.4                

QLimitive

QLimitive 是一个基于属性的原始 SQL 生成器,它尊重 Entity Framework Core,被称为 'Primitive'。

Releases GitHub license Build and Test

支持平台

  • .NET 6.0+

基于属性的 O/R 映射信息

QLimitive 通过 Entity Framework Core 中使用的属性执行 O/R 映射并生成 SQL。

using System;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace SampleApp;

[Table("T_People", Schema = "dbo")]
public sealed class Person
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; init; }

    [Column("姓")]
    public string LastName { get; init; }

    [Column("名")]
    public string FirstName { get; init; }

    [NotMapped]
    public string FullName => $"{this.LastName} {this.FirstName}";

    public int Age { get; init; }

    public bool HasChildren { get; init; }

    [AmbientValue("SYSDATETIME()")]
    public DateTimeOffset CreatedAt { get; init; }

    [Column("UpdatedAt")]
    [AmbientValue("SYSDATETIME()")]
    public DateTimeOffset ModifiedAt { get; init; }
}

SQL 生成

此库还提供使用上述元数据的自动 SQL 生成功能。您可以通过 QueryBuilder 类获取非常简单和典型的 SQL。当然,它完全类型安全。

// Query records with specified columns that matched specified condition
var sql = QueryBuilder.Select<Person>(DbDialect.SqlServer, x => new { x.LastName, x.Age }).Text;

/*
select
    [姓] as [LastName],
    [Age] as [Age]
from [dbo].[T_People]
*/
// If wants Where / OrderBy / ThenBy, allows you to write like following
using (var builder = new QueryBuilder<Person>(DbDialect.SqlServer))
{
    builder.Select(static x => new { x.Id, x.LastName });
    builder.Where(static x => x.LastName == "Suzuki");
    builder.OrderByDescending(static x => x.Age);
    builder.ThenBy(static x => x.ModifiedAt);
    var sql = builder.Build().Text;
}

/*
select
    [Id] as [Id],
    [姓] as [Name]
from [dbo].[T_People]
where
    [姓] = @p1
order by
    [Age] desc,
    [UpdatedAt]
*/
// Insert record to SQL Server
var sql = QueryBuilder.Insert<Person>(DbDialect.SqlServer, useAmbientValue: true).Text;

/*
insert into [dbo].[T_People]
(
    [姓],
    [名],
    [Age],
    [HasChildren],
    [CreatedAt],
    [UpdatedOn]
)
values
(
    @LastName,
    @FirstName,
    @Age,
    @HasChildren,
    SYSDATETIME(),
    SYSDATETIME()
)
*/
// Update records with specified columns that matched specified condition
using (var builder = new QueryBuilder<Person>(DbDialect.SqlServer))
{
    builder.Update(static x => new { x.LastName, x.Age, x.ModifiedAt }, useAmbientValue: true);
    builder.Where(static x => x.Age < 35 || x.LastName == "Suzuki");
    var sql = builder.Build().Text;
}

/*
update [dbo].[T_People]
set
    [姓] = @LastName,
    [Age] = @Age,
    [UpdatedAt] = SYSDATETIME()
where
    [Age] < @p3 or [姓] = @p4
*/

QueryBuilder 类还提供了一些其他重载函数以及 Count / Delete / Truncate 方法等。

安装

从下载 NuGet 包开始。

dotnet add package QLimitive

许可

此库根据 MIT 许可证 提供。

作者

Takaaki Suzuki(又名 @xin9le)是自 2012 年 7 月以来获得 Microsoft MVP(开发技术 C#)的日本软件开发人员。

产品 兼容的和额外的计算目标框架版本。
.NET net6.0 兼容。 net6.0-android 已计算。 net6.0-ios 已计算。 net6.0-maccatalyst 已计算。 net6.0-macos 已计算。 net6.0-tvos 已计算。 net6.0-windows 已计算。 net7.0 已计算。 net7.0-android 已计算。 net7.0-ios 已计算。 net7.0-maccatalyst 已计算。 net7.0-macos 已计算。 net7.0-tvos 已计算。 net7.0-windows 已计算。 net8.0 兼容。 net8.0-android 已计算。 net8.0-browser 已计算。 net8.0-ios 已计算。 net8.0-maccatalyst 已计算。 net8.0-macos 已计算。 net8.0-tvos 已计算。 net8.0-windows 已计算。
兼容目标框架
包含的目标框架(在包中)
了解更多关于 目标框架.NET Standard 的信息。

NuGet 包

此包未由任何 NuGet 包使用。

GitHub 仓库

此包未由任何流行 GitHub 仓库使用。

版本 下载 最后更新
0.1.4 1,028 4/7/2024
0.1.3 11,040 6/12/2022
0.1.2 1,178 5/15/2022
0.1.1 1,281 12/23/2021