Nanorm.Npgsql 0.1.2

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

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

Nanorm CI NuGet

一个用于 ADO.NET 的微型数据访问辅助库。适用于剪裁和原生 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 在简单的插入 & return 操作中的性能比较,包括执行时间和内存分配。

方法 平均值 错误 标准差 比率 比率标准差 分配的 分配比率
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仓库 (1)

显示最热门的1个依赖Nanorm.Npgsql的GitHub仓库

仓库 星标
aspnet/Benchmarks
ASP.NET Core基准测试
版本 下载 最后更新
0.1.2 214 12/6/2023
0.1.1 129 11/21/2023
0.1.0 75 11/15/2023
0.0.6 290 6/2/2023
0.0.5 91 5/30/2023
0.0.4 532 5/2/2023
0.0.3 94 4/11/2023
0.0.2 95 4/10/2023