From 7e31bf0f35de2fc7892bc4e253dfaf5fd05459cd Mon Sep 17 00:00:00 2001
From: Daniel Cazzulino <daniel@cazzulino.com>
Date: Sat, 21 Dec 2024 04:06:06 -0300
Subject: [PATCH] Add simple dapper+sqlite console app demo

---
 src/Sample/ConsoleDb/ConsoleDb.csproj |  24 +++++++++++++++++++++
 src/Sample/ConsoleDb/Program.cs       |  29 ++++++++++++++++++++++++++
 src/Sample/ConsoleDb/dapper.db        | Bin 0 -> 12288 bytes
 src/Sample/Sample.sln                 |   6 ++++++
 4 files changed, 59 insertions(+)
 create mode 100644 src/Sample/ConsoleDb/ConsoleDb.csproj
 create mode 100644 src/Sample/ConsoleDb/Program.cs
 create mode 100644 src/Sample/ConsoleDb/dapper.db

diff --git a/src/Sample/ConsoleDb/ConsoleDb.csproj b/src/Sample/ConsoleDb/ConsoleDb.csproj
new file mode 100644
index 0000000..01160c0
--- /dev/null
+++ b/src/Sample/ConsoleDb/ConsoleDb.csproj
@@ -0,0 +1,24 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <OutputType>Exe</OutputType>
+    <TargetFramework>net8.0</TargetFramework>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <Nullable>enable</Nullable>
+    <RestoreSources>https://api.nuget.org/v3/index.json;$(PackageOutputPath)</RestoreSources>
+    <EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <PackageReference Include="SQLitePCLRaw.bundle_e_sqlite3" Version="2.1.10" />
+    <PackageReference Include="StructId" Version="42.*" />
+    <PackageReference Include="Microsoft.Data.Sqlite.Core" Version="8.0.11" />
+    <PackageReference Include="Ulid" Version="1.3.4" />
+    <PackageReference Include="Dapper" Version="2.1.35" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <None Update="dapper.db" CopyToOutputDirectory="Always" />
+  </ItemGroup>
+
+</Project>
diff --git a/src/Sample/ConsoleDb/Program.cs b/src/Sample/ConsoleDb/Program.cs
new file mode 100644
index 0000000..a50b83e
--- /dev/null
+++ b/src/Sample/ConsoleDb/Program.cs
@@ -0,0 +1,29 @@
+using ConsoleDb;
+using Dapper;
+using Microsoft.Data.Sqlite;
+
+SQLitePCL.Batteries.Init();
+
+using var connection = new SqliteConnection("Data Source=dapper.db")
+    .UseStructId();
+
+connection.Open();
+
+// Seed data
+var productId = Ulid.NewUlid();
+var product = new Product(new ProductId(productId), "Product");
+
+connection.Execute("INSERT INTO Products (Id, Name) VALUES (@Id, @Name)", new Product(ProductId.New(), "Product1"));
+connection.Execute("INSERT INTO Products (Id, Name) VALUES (@Id, @Name)", product);
+connection.Execute("INSERT INTO Products (Id, Name) VALUES (@Id, @Name)", new Product(ProductId.New(), "Product2"));
+
+// showcase we can query by the underlying ulid
+var product2 = connection.QueryFirst<Product>("SELECT * FROM Products WHERE Id = @Id", new { Id = productId });
+var product3 = connection.QueryFirst<Product>("SELECT * FROM Products WHERE Id = @Id", new { Id = new ProductId(productId) });
+
+Console.WriteLine("Found saved product by value: " + product.Equals(product2));
+Console.WriteLine("Found saved product by id: " + product.Equals(product3));
+
+public readonly partial record struct ProductId : IStructId<Ulid>;
+
+public record Product(ProductId Id, string Name);
\ No newline at end of file
diff --git a/src/Sample/ConsoleDb/dapper.db b/src/Sample/ConsoleDb/dapper.db
new file mode 100644
index 0000000000000000000000000000000000000000..b0d7cd6cf057b55e36759e077f439ab7479ab227
GIT binary patch
literal 12288
zcmeI#&r8EF6u|MMiVk6Px19>_s33~?4_HSI!&+yp;7(n&84NayTL)hK>-=B*3q0CP
za^894`yfAFLIU~Z^qwA*Sz~2dFBfGa*Q%$qRyQI_Dc!b%w)t@Rp-<Y;<=aB5i|J1{
z{8d3XQQ;)~-gba}1Q0*~0R#|0009ILKmY**c2U6U<9-zBuc#?s=XSKLtMyy6@?$W_
zOq?6Z<J-iDUzO8gCAoRYWt0u?<7_N<W-RGLF6ncUoJ(3R?Ek)BJG%^y`h!TT*?VO_
zS0D4XrZ38MQ*ZLZUtC=InXBtN&a>;fp6dt%5I_I{1Q0*~0R#|0009IL*jIrQ_b}@J
bef?hEg#ZEwAb<b@2q1s}0tg_0z((K?L0LKv

literal 0
HcmV?d00001

diff --git a/src/Sample/Sample.sln b/src/Sample/Sample.sln
index 943a9df..261b53c 100644
--- a/src/Sample/Sample.sln
+++ b/src/Sample/Sample.sln
@@ -9,6 +9,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MinimalApi", "MinimalApi\Mi
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MvcWebApp", "MvcWebApp\MvcWebApp.csproj", "{98DCCA61-3848-967E-E422-1DEDB4CB8569}"
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConsoleDb", "ConsoleDb\ConsoleDb.csproj", "{A66CF326-8BE8-2BD1-25F7-0D7960DFAFC6}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -27,6 +29,10 @@ Global
 		{98DCCA61-3848-967E-E422-1DEDB4CB8569}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{98DCCA61-3848-967E-E422-1DEDB4CB8569}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{98DCCA61-3848-967E-E422-1DEDB4CB8569}.Release|Any CPU.Build.0 = Release|Any CPU
+		{A66CF326-8BE8-2BD1-25F7-0D7960DFAFC6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{A66CF326-8BE8-2BD1-25F7-0D7960DFAFC6}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{A66CF326-8BE8-2BD1-25F7-0D7960DFAFC6}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{A66CF326-8BE8-2BD1-25F7-0D7960DFAFC6}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE