StrEnum.Dapper
1.0.1
dotnet add package StrEnum.Dapper --version 1.0.1
NuGet\Install-Package StrEnum.Dapper -Version 1.0.1
<PackageReference Include="StrEnum.Dapper" Version="1.0.1" />
paket add StrEnum.Dapper --version 1.0.1
#r "nuget: StrEnum.Dapper, 1.0.1"
// Install StrEnum.Dapper as a Cake Addin
#addin nuget:?package=StrEnum.Dapper&version=1.0.1
// Install StrEnum.Dapper as a Cake Tool
#tool nuget:?package=StrEnum.Dapper&version=1.0.1
StrEnum.Dapper
Allows to use StrEnum string enums with Dapper.
Supports Dapper v2.0.4+
Installation
You can install StrEnum.Dapper using the .NET CLI:
dotnet add package StrEnum.Dapper
Usage
Define a string enum and an entity that uses it:
public class Sport: StringEnum<Sport>
{
public static readonly Sport RoadCycling = Define("ROAD_CYCLING");
public static readonly Sport MountainBiking = Define("MTB");
public static readonly Sport TrailRunning = Define("TRAIL_RUNNING");
}
public class Race
{
public Guid Id { get; set; }
public string Name { get; set; }
public Sport Sport { get; set; }
}
Initialization
Invoke the StrEnumDapper.UseStringEnums
method before the first use of Dapper:
StrEnumDapper.UseStringEnums();
Note, that the UseStringEnums
method searches for string enums in all the loaded assemblies, and then registers them with Dapper. Since .NET loads assemblies in a lazy fashion, make sure that the assemblies containing string enums are loaded before calling UseStringEnums
. You can do that either implicitly, by referencing types in such assemblies, or by explicitly loading such assemblies. For example, if Sport
is located in a separate assembly, you can load it the following way:
Assembly.Load(typeof(Sport).Assembly.GetName());
Executing commands
connection.Execute(@"INSERT Races(Id, Name, Sport) values (@id, @name, @sport)",
new[]
{
new
{
id = Guid.NewGuid(),
name = "Chornohora Sky Marathon",
sport = Sport.TrailRunning
},
new
{
id = Guid.NewGuid(),
name = "Cape Town Cycle Tour",
sport = Sport.RoadCycling
},
new
{
id = Guid.NewGuid(),
name = "Cape Epic",
sport = Sport.MountainBiking
}
});
Running queries
You can pass string enums in query parameters and map them to your entities:
var trailRuns = connection.Query(@"SELECT Id, Name, Sport FROM Races WHERE Sport = @sport", new { sport = Sport.TrailRunning });
Note, that you cannot use string enums in the IN
clause - Dapper does not support it yet. The following won't work:
var cyclingRaces = connection.Query(@"SELECT Id, Name, Sport FROM Races WHERE Sport in @sports",
new { sports = new[]{ Sport.TrailRunning, Sport.MountainBiking }});
The workaround would be to case each of the string enum's members to string:
var cyclingRaces = connection.Query(@"SELECT Id, Name, Sport FROM Races WHERE Sport in @sports",
new { sports = new[]{ (string)Sport.TrailRunning, (string)Sport.MountainBiking }});
License
Copyright © 2022 Dmitry Khmara.
StrEnum is licensed under the MIT license.
Product | Versions |
---|---|
.NET | net5.0 net5.0-windows 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 |
.NET Core | netcoreapp2.0 netcoreapp2.1 netcoreapp2.2 netcoreapp3.0 netcoreapp3.1 |
.NET Standard | netstandard2.0 netstandard2.1 |
.NET Framework | net461 net462 net463 net47 net471 net472 net48 net481 |
MonoAndroid | monoandroid |
MonoMac | monomac |
MonoTouch | monotouch |
Tizen | tizen40 tizen60 |
Xamarin.iOS | xamarinios |
Xamarin.Mac | xamarinmac |
Xamarin.TVOS | xamarintvos |
Xamarin.WatchOS | xamarinwatchos |
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.