Nanorm.Sqlite 0.1.2

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

// Install Nanorm.Sqlite as a Cake Tool
#tool nuget:?package=Nanorm.Sqlite&version=0.1.2                

Nanorm CI NuGet

一个针对 ADO.NET 的小型数据访问辅助库。适合裁剪和 Native AOT 。

它支持

如何使用

Nanorm 支持 .NET 6+,并因 接口上的静态虚拟成员 和源生成器的支持而特别支持 .NET 7+。

入门

  1. 安装适合您使用的 ADO.NET 提供程序(即数据库)的 Nanorm 包。在项目目录中使用 dotnet 命令行

    • PostgreSQL

      dotnet add package Nanorm.Npgsql --prerelease
      
    • SQLite

      dotnet add package Nanorm.Sqlite --prerelease
      
    • 所有其他 ADO.NET 提供程序

      dotnet add package Nanorm --prerelease
      
  2. 创建一个 classrecordstruct 来映射数据库查询结果。如果您正在使用 .NET 7 或 .NET 8,您可以将它设为 partial 并使用 [DataRecordMapper] 特性进行装饰以启用源生成器,该生成器将为您生成实现 IDataRecordMapper<T> 接口的代码

    [DataRecordMapper]
    public partial class Todo
    {
        public int Id { get; set; }
    
        public required string Title { get; set; }
    
        public bool IsComplete { get; set; }
    }
    
    // Generated for you if .NET 7+, otherwise you'll need to write it yourself
    partial class Todo : IDataRecordMapper<Todo>
    {
        public static Todo Map(System.Data.IDataRecord dataRecord) =>
            new()
            {
                Id = dataRecord.GetInt32("Id"),
                Title = dataRecord.GetString("Title"),
                IsComplete = dataRecord.GetBoolean("IsComplete"),
            };
    }
    
  3. 创建适当的 IDbConnection 实例并使用 Nanorm 扩展方法之一执行查询。 QueryAsync 方法返回 IAsyncEnumerable,因此您可以使用 await foreach 遍历结果或简单地调用 ToListAsync() 以异步方式获取 List<T> 结果。

    // Using Npgsql to query a local PostgreSQL instance
    var connectionString = "Server=localhost;Port=5432;Username=postgres;Database=postgres";
    await using var db = new NpgsqlDataSourceBuilder(connectionString).Build();
    
    var todos = db.QueryAsync<Todo>("SELECT * FROM Todos");
    var todosList = await todos.ToListAsync();
    
    if (todosList.Count == 0)
    {
        Console.WriteLine("There are currently no todos!");
    }
    else
    {
        Console.WriteLine($"Found {todosList.Count} todo(s):");
        foreach (var todo in todosList)
        {
            Console.WriteLine($"({todo.Id}) {todo.Title}");
        }
    }
    

使用参数

Nanorm 支持几种将参数传递给查询的不同方法。

  • 传递由 Nanorm 的 自定义字符串插值处理器 处理的插值字符串。这是首选方法。查询会自动以最佳方式参数化,即没有字符串连接,使用池分配等。

    var title = "Do the dishes";
    var result = db.QueryAsync<Todo>($"SELECT * FROM Todos WHERE Title = {title}")
    
  • 传递 ADO.NET 提供程序的 DbParameter 实例作为参数,例如:

    var title = "Do the dishes";
    var sql = "SELECT * FROM Todos WHERE Title = $1";
    var result = db.QueryAsync<Todo>(sql, new NpgsqlParameter { Value =  title }))
    
  • 传递一个回调,该回调修改 ADO.NET 提供程序的参数收集实现,例如:

    var title = "Do the dishes";
    var sql = "SELECT * FROM Todos WHERE Title = $1";
    var result = db.QueryAsync<Todo>(sql, parameters => parameters.Add(title))
    

扩展方法

以下扩展方法被提供,以便更容易地与数据库交互:

方法 描述
ExecuteAsync 执行不返回任何结果的命令。
ExecuteScalarAsync 执行命令并返回第一个结果集中的第一行的第一列。忽略所有其他列、行和结果集。
QueryAsync 执行命令并返回结果作为适当类型的 DbDataReader
QueryAsync<T> 执行命令并返回在 T 的实例上映射的行作为 IAsyncEnumerable<T>
QuerySingleAsync<T> 执行命令并将返回的第一个行映射到 T 的实例。
AsDbParameter object 值创建特定于提供程序的参数对象。
AsTypedDbParameter<T> T 值创建泛型参数(仅限 Npgsql)。
ToListAsync<T> IAsyncEnumerable<T> 异步转换为 List<T>

基准测试

Nanorm 设计为在 ADO.NET 之上一个非常薄的层,支持修剪和本地 AOT。以下是如何将其与原始 ADO.NET 和 Dapper 在简单插入 & 返回操作中相对于执行时间和内存分配进行比较。

方法 平均值 错误 标准差 比率 比率标准差 分配的 分配比率
AdoNet 401.7 us 3.83 us 3.58 us 1.00 0.00 2.49 KB 1.00
AdoNetDbCommon 417.6 us 8.33 us 7.79 us 1.04 0.03 4.18 KB 1.68
Dapper 400.7 us 4.57 us 4.28 us 1.00 0.01 3.19 KB 1.28
DapperAot 409.2 us 5.80 us 5.43 us 1.02 0.01 3.27 KB 1.32
NanormDbParameters 402.7 us 5.47 us 5.12 us 1.00 0.02 2.65 KB 1.07
NanormStringInterpolation 403.5 us 5.75 us 5.38 us 1.00 0.02 2.68 KB 1.08
NanormDbCommonParameters 404.0 us 5.48 us 5.12 us 1.01 0.01 2.86 KB 1.15
NanormDbCommonStringInterpolation 406.8 us 3.60 us 3.19 us 1.01 0.01 3.12 KB 1.26
产品 兼容和额外的目标框架版本。
.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.2 199 12/6/2023
0.1.1 118 11/21/2023
0.1.0 96 11/15/2023
0.0.6 104 6/2/2023
0.0.5 87 5/30/2023
0.0.4 88 5/2/2023
0.0.3 97 4/11/2023