UskokDB 2.1.1

dotnet add package UskokDB --version 2.1.1
NuGet\Install-Package UskokDB -Version 2.1.1
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="UskokDB" Version="2.1.1" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add UskokDB --version 2.1.1
#r "nuget: UskokDB, 2.1.1"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install UskokDB as a Cake Addin
#addin nuget:?package=UskokDB&version=2.1.1

// Install UskokDB as a Cake Tool
#tool nuget:?package=UskokDB&version=2.1.1

UskokDB

A simple C# ORM which adds extension methods on IDbConnection and DbConnection classes

Quering

Lets supose we have a model specified like:
class Person
{
    public string Name { get; set; }
    public string LastName { get; set; }
}

//Getting a connection instance from some factory
IDbConnection connection = SomeConnectionFactory.CreateConnection();

Sync quering

List<dynamic> people = connection.Query("Select * From people Where name=@Name", new { 
    Name = "Vuk" 
})
List<Person> people = connection.Query<Person>("Select * From people Where name=@Name", new { 
    Name = "Vuk" 
})
dynamic person = connection.QuerySingle("Select * From people Where name=@Name", new { 
    Name = "Vuk" 
})
Person person = connection.QuerySingle<Person>("Select * From people Where name=@Name", new { 
    Name = "Vuk" 
})

Async Quering

List<dynamic> people = await connection.QueryAsync("Select * From people Where name=@Name", new { 
    Name = "Vuk" 
})
List<Person> people = await connection.QueryAsync<Person>("Select * From people Where name=@Name", new { 
    Name = "Vuk" 
})
dynamic person = await connection.QuerySingleAsync("Select * From people Where name=@Name", new { 
    Name = "Vuk" 
})
Person person = await connection.QuerySingleAsync<Person>("Select * From people Where name=@Name", new { 
    Name = "Vuk" 
})

IParamterConverter

The ParameterHandler class has a static dictionary Dictionary<Type, IParamterConverter> ParamterConverters which is used as a map to create db values from custom types the prime example of this is Guid demostrated here

[typeof(Guid)] = new DefaultParamterConverter<Guid, string>((guid) => guid.ToString(), Guid.Parse, Guid.Empty.ToString().Length)

The DefaultParamterConverter takes in a function of when writing to a database and a function when reading it along side with the int? maxLength and string? typeName, maxLength is used to determine the max length in case the writen type is string in which case this is and it is Guid.Empty.ToString().Length and typeName is used in the extension library UskokDB.MySql to know what type should be written in case of a for example DateTime this parameter would be DATETIME.

Note! Primtive types cannot be changed (int, uint, char, bool, short, ushort, enum, string, double, float, decimal, etc...)

IParamterConverter is used for the type Guid so that the model can be represented like this

class Person 
{
    public Guid Id;
    public string Name;
    public string LastName;
}

This can be just any type so lets create an example

//This is a kind of dumb example but shows the way it used
const int MaxNameLength = 20;
class NameClass
{
    public string Value; 
}
class Person 
{
    public Guid Id;
    public NameClass Name;
    public NameClass LastName;
}
ParameterHandler.ParamterConverters[typeof(NameClass)] = new DefaultParamterConverter<NameClass, string>(nameClass => nameClass.Value, (str) => new NameClass { Value = str }, MaxNameLength)

Column Attribute

You can use the column attribute in order to specify a name for a certain property and here is an example of this

class Person {
    [Column("name")]
    public string FullName {get; set;}
}

Person p = connection.QuerySingle<Person>("Select * From people where name='Somename'")

As you can see the column name in the table is name but we can still name the property as we wish as long as we specify the actuall name of the column with the attribute

NotMapped Attribute

You can ignore a specific property with this attribute

class Person {
    [NotMapped]
    public string FullName {get; set;}
    
    public int Age {get; set;}
}

Json

You can configure the library to use json for unkown structs and classes this is however 
bypassed if a speicifc way of converting is specified in the convert dictionary
//This sets the usage
ParameterHandler.UseJsonForUnknownClassesAndStructs = true;

//And here is an example with Newtonsoft.Json but you can use any library as you wish
ParameterHandler.JsonWriter = (object? someInstance) => 
    someInstance == null? null : JsonConvert.SerializeObject(someInstance);
    //If you return null, null value will be stored in the column
    
ParameterHandler.JsonReader = (string? jsonString, Type columnType) =>
    jsonString == null? null : JsonConvert.DeserializeObject(jsonString, columnType);
Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 is compatible.  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 is compatible.  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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on UskokDB:

Package Downloads
UskokDB.MySql

MySql helper for UskokDB

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
2.1.1 251 8/31/2023
2.1.0 187 8/7/2023
2.0.1 119 7/28/2023
2.0.0 190 7/28/2023
1.7.0 209 7/19/2023
1.6.0 151 4/29/2023
1.5.0 273 4/21/2023
1.4.0 259 4/15/2023
1.3.0 153 4/13/2023
1.2.0 270 4/12/2023
1.1.0 149 4/10/2023
1.0.0 175 4/9/2023

Fixed enum types