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
NuGet 团队不提供对此客户端的支持。请联系其 维护者 进行支持。
#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
NuGet 团队不提供对此客户端的支持。请联系其 维护者 进行支持。
QLimitive
QLimitive 是一个基于属性的原始 SQL 生成器,它尊重 Entity Framework Core,被称为 'Primitive'。
支持平台
- .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 已计算。 |
-
net6.0
- FastMember (>= 1.5.0)
- System.Collections Immutable (>= 8.0.0)
- ZString (>= 2.6.0)
-
net8.0
- FastMember (>= 1.5.0)
- ZString (>= 2.6.0)
NuGet 包
此包未由任何 NuGet 包使用。
GitHub 仓库
此包未由任何流行 GitHub 仓库使用。