StrEnum.Dapper
1.0.1
Prefix Reserved
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 Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.