SQLKata 与 SQLite 最小示例 (Powershell)

SQLKata with SQLite minimal example (Powershell)

我有一个 sqlite 数据库说 c:\myDb.sqlite

我已经弄清楚如何在 SQLKata 中构建对此数据库的查询:

$query = New-Object SqlKata.Query("myTable")
$compiler = New-Object SqlKata.Compilers.SqliteCompiler
$query.Where("myColumn", "1")
$result = $compiler.Compile($query)

但我完全不知道如何将其提交到我的 Sqlite 数据库。

有人能帮忙吗?

谢谢,

亚历克斯

从 PowerShell 使其工作受到两个困难的阻碍:

  • 通常加载与 NuGet 包相关的程序集,特别是 Microsoft.Data.Sqlite NuGet 包通常需要在 PowerShell 中进行额外的、不明显的工作。

  • PowerShell 通常不会显示 扩展方法 - 例如.Get() 在查询实例上 - 需要显式调用 [SqlKata.Execution.QueryExtensions] 的静态方法。

具体来说,从 PowerShell 使用 NuGet 包需要以下步骤,这些步骤既不方便也不明显:

  • 仅安装带有 Install-Package or trying to use them from the local cache created by .NET SDK projects in $HOME/.nuget/packages is often not enough, because any assemblies they depend on aren't then present in the same directory, which is what Add-Type 的 NuGet 包需要。

  • 它们还必须通过辅助 .NET SDK 项目以适合平台的方式解压到单个目标文件夹(每个包或组合),如 this answer 中所述。 =30=]

  • 此外,对于 Microsoft.Data.Sqlite 包,适合平台的 native 库(例如, win-x64\native\*.dll 来自 .NET SDK 项目发布文件夹的“运行times”文件夹子树)必须直接复制到 PowerShell(核心)中的目标文件夹,但奇怪的是 Windows PowerShell 中没有,至少从包版本 5.0.9

    开始是这样

以下 示例代码使用 Add-NuGetType 辅助函数 ,可从 this MIT-licensed Gist 获得,它自动执行上述所有步骤:

注:

  • 假设您已查看链接代码以确保它是安全的(我个人可以向您保证,但您应该始终检查),您可以直接安装 Add-NuGetType如下(将显示有关如何在未来的会话中使用该功能或​​将其转换为脚本的说明):

    irm https://gist.github.com/mklement0/7436c9e4b2f73d7256498f959f0d5a7c/raw/Add-NuGetType.ps1 | iex
    
  • 当第一次 运行 时,该函数会下载并安装嵌入文件夹中的 .NET SDK 的私有副本,稍后下载的 NuGet 包会缓存在该文件夹中。此初始安装需要一段时间,下面使用的 -Verbose 开关会报告其进度。

  • Add-NuGetType 不是 用于 生产使用 ,而是用于 实验 使用 NuGet 包; 运行 help Add-NuGetType 了解更多信息。

# Reference the relevant namespaces.
using namespace SqlKata
using namespace SqlKata.Compilers
using namespace SqlKata.Execution
using namespace Microsoft.Data.Sqlite

# Load the SqlKata and Sqlite asssemblies.
# See the comments above for how to install the Add-NuGetType function.
# Note: On first call, a private copy of the .NET SDK is downloaded
#       on demand, which takes a while.
Add-NuGetType -Verbose SqlKata, SqlKata.Execution, Microsoft.Data.Sqlite

# First, create sample database './sample.db' with table 'sample_table'
@'
create table sample_table (Name string, Age int); 
insert into sample_table (Name, Age) values ("JDoe", 42), ("JRoe", 43);
.save ./sample.db
'@ | sqlite3

# Create a [SqliteConnection] instance...
$connection = [SqliteConnection]::new("Data Source=$PWD/sample.db")
# ... and create a query factory for it.
$sqliteDb = [QueryFactory]::new($connection, [SqlServerCompiler]::new())

# Create and execute a sample query.
$query = $sqliteDb.Query("sample_table").Where("Name", "JRoe")
# Note the need to use the static methods of [SqlKata.Execution.QueryExtensions],
# because PowerShell doesn't make *extension methods* automatically available.
[SqlKata.Execution.QueryExtensions]::Get($query) # outputs [Dapper.SqlMapper+DapperRow] instances