Vitorm.MySql
                             
                            
                                2.0.0-preview
                            
                        
                    See the version list below for details.
dotnet add package Vitorm.MySql --version 2.0.0-preview
NuGet\Install-Package Vitorm.MySql -Version 2.0.0-preview
<PackageReference Include="Vitorm.MySql" Version="2.0.0-preview" />
<PackageVersion Include="Vitorm.MySql" Version="2.0.0-preview" />
<PackageReference Include="Vitorm.MySql" />
paket add Vitorm.MySql --version 2.0.0-preview
#r "nuget: Vitorm.MySql, 2.0.0-preview"
#:package Vitorm.MySql@2.0.0-preview
#addin nuget:?package=Vitorm.MySql&version=2.0.0-preview&prerelease
#tool nuget:?package=Vitorm.MySql&version=2.0.0-preview&prerelease
Vitorm.MySql
Vitorm.MySql is a lightweight yet comprehensive ORM for MySql that strikes the perfect balance between simplicity and functionality.
Similar to Dapper in its lightweight design, Vitorm offers an easy-to-use, efficient interface for data access.
However, it doesn't stop there; Vitorm goes beyond basic ORM capabilities to provide a rich feature set akin to Entity Framework.
This means you get the best of both worlds: the performance and simplicity of Dapper with the robust features and flexibility of Entity Framework, making Vitorm an ideal choice for developers seeking a powerful yet streamlined ORM solution.
source address: https://github.com/VitormLib/Vitorm/tree/master/src/Vitorm.MySql
  
| Build | NuGet | 
|---|---|
Vitorm.MySql Documentation
This guide will walk you through the steps to set up and use Vitorm.MySql.
supported features:
| feature | method | remarks | |
|---|---|---|---|
| create table | TryCreateTable | ||
| drop table | TryDropTable | ||
| --- | --- | --- | --- | 
| create records | Add AddRange | ||
| retrieve records | Query Get | ||
| update records | Update UpdateRange ExecuteUpdate | ||
| delete records | Delete DeleteRange DeleteByKey DeleteByKeys ExecuteDelete | ||
| --- | --- | --- | --- | 
| change table | ChangeTable | change mapping table from database | |
| change database | ChangeDatabase | change database to be connected | |
| --- | --- | --- | --- | 
| collection total count | TotalCount | Collection Total Count without Take and Skip | |
| collection total count and list | ToListAndTotalCount | query List and TotalCount at on request | |
Installation
Before using Vitorm, install the necessary package:
dotnet add package Vitorm.MySql
Minimum viable demo
code address: Program_Min.cs
using Vitorm;
namespace App
{
    public class Program_Min
    {
        static void Main2(string[] args)
        {
            // #1 Init
            using var dbContext = new Vitorm.Sql.SqlDbContext();
            dbContext.UseMySql("Data Source=localhost;Port=3306;Database=dev-orm;SslMode=none;User Id=root;Password=123456;CharSet=utf8;allowPublicKeyRetrieval=true;");
            // #2 Query
            var user = dbContext.Get<User>(1);
            var users = dbContext.Query<User>().Where(u => u.name.Contains("li")).ToList();
        }
        // Entity Definition
        [System.ComponentModel.DataAnnotations.Schema.Table("User")]
        public class User
        {
            [System.ComponentModel.DataAnnotations.Key]
            public int id { get; set; }
            public string name { get; set; }
            public DateTime? birth { get; set; }
            public int? fatherId { get; set; }
        }
    }
}
Full Example
This example provides a comprehensive guide to utilizing Vitorm for basic and advanced database operations while maintaining lightweight performance.
code address: Program.cs
using Vitorm;
namespace App
{
    public class Program
    {
        static void Main(string[] args)
        {
            // #1 Configures Vitorm
            using var dbContext = new Vitorm.Sql.SqlDbContext();
            dbContext.UseMySql("Data Source=localhost;Port=3306;Database=dev-orm;SslMode=none;User Id=root;Password=123456;CharSet=utf8;allowPublicKeyRetrieval=true;");
            // #2 Create Table
            dbContext.TryDropTable<User>();
            dbContext.TryCreateTable<User>();
            // #3 Insert Records
            dbContext.Add(new User { id = 1, name = "lith" });
            dbContext.AddRange(new[] {
                new User { id = 2, name = "lith", fatherId = 1 },
                new User { id = 3, name = "lith", fatherId = 1 }
            });
            // #4 Query Records
            {
                var user = dbContext.Get<User>(1);
                var users = dbContext.Query<User>().Where(u => u.name.Contains("li")).ToList();
                var sql = dbContext.Query<User>().Where(u => u.name.Contains("li")).ToExecuteString();
            }
            // #5 Update Records
            dbContext.Update(new User { id = 1, name = "lith1" });
            dbContext.UpdateRange(new[] {
                new User { id = 2, name = "lith2", fatherId = 1 },
                new User { id = 3, name = "lith3", fatherId = 2 }
            });
            dbContext.Query<User>().Where(u => u.name.Contains("li"))
                .ExecuteUpdate(u => new User { name = "Lith" + u.id });
            // #6 Delete Records
            dbContext.Delete<User>(new User { id = 1, name = "lith1" });
            dbContext.DeleteRange(new[] {
                new User { id = 2, name = "lith2", fatherId = 1 },
                new User { id = 3, name = "lith3", fatherId = 2 }
            });
            dbContext.DeleteByKey<User>(1);
            dbContext.DeleteByKeys<User, int>(new[] { 1, 2 });
            dbContext.Query<User>().Where(u => u.name.Contains("li"))
                .ExecuteDelete();
            // #7 Join Queries
            {
                var query =
                        from user in dbContext.Query<User>()
                        from father in dbContext.Query<User>().Where(father => user.fatherId == father.id).DefaultIfEmpty()
                        where father != null
                        orderby user.id
                        select new { user, father };
                var sql = query.ToExecuteString();
                var users = query.ToList();
            }
            // #8 Transactions
            {
                using var tran1 = dbContext.BeginTransaction();
                dbContext.Update(new User { id = 4, name = "u4001" });
                using (var tran2 = dbContext.BeginTransaction())
                {
                    dbContext.Update(new User { id = 4, name = "u4002" });
                    // will rollback
                }
                using (var tran2 = dbContext.BeginTransaction())
                {
                    dbContext.Update(new User { id = 4, name = "u4002" });
                    tran2.Rollback();
                }
                using (var tran2 = dbContext.BeginTransaction())
                {
                    dbContext.Update(new User { id = 4, name = "u4003" });
                    tran2.Commit();
                }
                tran1.Commit();
            }
        }
        // Entity Definition
        [System.ComponentModel.DataAnnotations.Schema.Table("User")]
        public class User
        {
            [System.ComponentModel.DataAnnotations.Key]
            public int id { get; set; }
            public string name { get; set; }
            public DateTime? birth { get; set; }
            public int? fatherId { get; set; }
        }
    }
}
Explanation
- Setup: Initializes the database and configures Vitorm.
- Create Table: Drops and recreates the Usertable.
- Insert Records: Adds single and multiple user records.
- Query Records: Retrieves user records using various querying methods.
- Update Records: Updates single and multiple user records.
- Delete Records: Deletes single and multiple user records.
- Join Queries: Performs a join operation between user and father records.
- Transactions: Demonstrates nested transactions and rollback/commit operations.
- Database Functions: Uses custom database functions in queries.
Vitorm.Data Documentation
Vitorm.Data is a static class that allows you to use Vitorm without explicitly creating or disposing of a DbContext.
Installation
Before using Vitorm.Data, install the necessary package:
dotnet add package Vitorm.Data
dotnet add package Vitorm.MySql
Config settings
// appsettings.json
{
  "Vitorm": {
    "Data": [
      {
        "provider": "MySql",
        "namespace": "App",
        "connectionString": "Data Source=localhost;Port=3306;Database=dev-orm;SslMode=none;User Id=root;Password=123456;CharSet=utf8;allowPublicKeyRetrieval=true;"
      }
    ]
  }
}
Minimum viable demo
After configuring the
appsettings.jsonfile, you can directly perform queries without any additional configuration or initialization,Vitorm.Datais that easy to use.
code address: Program_Min.cs
using Vitorm;
namespace App
{
    public class Program_Min
    {
        static void Main2(string[] args)
        {
            //  Query Records
            var user = Data.Get<User>(1);
            var users = Data.Query<User>().Where(u => u.name.Contains("li")).ToList();
        }
        // Entity Definition
        [System.ComponentModel.DataAnnotations.Schema.Table("User")]
        public class User
        {
            [System.ComponentModel.DataAnnotations.Key]
            public int id { get; set; }
            public string name { get; set; }
            public DateTime? birth { get; set; }
            public int? fatherId { get; set; }
        }
    }
}
Full Example
code address: Program.cs
using Vitorm;
namespace App
{
    public class Program
    {
        static void Main(string[] args)
        {
            // #1 No need to init Vitorm.Data
            // #2 Create Table
            Data.TryDropTable<User>();
            Data.TryCreateTable<User>();
            // #3 Insert Records
            Data.Add(new User { id = 1, name = "lith" });
            Data.AddRange(new[] {
                new User { id = 2, name = "lith", fatherId = 1 },
                new User { id = 3, name = "lith", fatherId = 1 }
            });
            // #4 Query Records
            {
                var user = Data.Get<User>(1);
                var users = Data.Query<User>().Where(u => u.name.Contains("li")).ToList();
                var sql = Data.Query<User>().Where(u => u.name.Contains("li")).ToExecuteString();
            }
            // #5 Update Records
            Data.Update(new User { id = 1, name = "lith1" });
            Data.UpdateRange(new[] {
                new User { id = 2, name = "lith2", fatherId = 1 },
                new User { id = 3, name = "lith3", fatherId = 2 }
            });
            Data.Query<User>().Where(u => u.name.Contains("li"))
                .ExecuteUpdate(u => new User { name = "Lith" + u.id });
            // #6 Delete Records
            Data.Delete<User>(new User { id = 1, name = "lith1" });
            Data.DeleteRange(new[] {
                new User { id = 2, name = "lith2", fatherId = 1 },
                new User { id = 3, name = "lith3", fatherId = 2 }
            });
            Data.DeleteByKey<User>(1);
            Data.DeleteByKeys<User, int>(new[] { 1, 2 });
            Data.Query<User>().Where(u => u.name.Contains("li"))
                .ExecuteDelete();
            // #7 Join Queries
            {
                var query =
                        from user in Data.Query<User>()
                        from father in Data.Query<User>().Where(father => user.fatherId == father.id).DefaultIfEmpty()
                        where father != null
                        orderby user.id
                        select new { user, father };
                var sql = query.ToExecuteString();
                var users = query.ToList();
            }
            // #8 Transactions
            {
                using var dbContext = Data.DataProvider<User>().CreateSqlDbContext();
                using var tran1 = dbContext.BeginTransaction();
                dbContext.Update(new User { id = 4, name = "u4001" });
                using (var tran2 = dbContext.BeginTransaction())
                {
                    dbContext.Update(new User { id = 4, name = "u4002" });
                    // will rollback
                }
                using (var tran2 = dbContext.BeginTransaction())
                {
                    dbContext.Update(new User { id = 4, name = "u4002" });
                    tran2.Rollback();
                }
                using (var tran2 = dbContext.BeginTransaction())
                {
                    dbContext.Update(new User { id = 4, name = "u4003" });
                    tran2.Commit();
                }
                tran1.Commit();
            }
        }
        // Entity Definition
        [System.ComponentModel.DataAnnotations.Schema.Table("User")]
        public class User
        {
            [System.ComponentModel.DataAnnotations.Key]
            public int id { get; set; }
            public string name { get; set; }
            public DateTime? birth { get; set; }
            public int? fatherId { get; set; }
        }
    }
}
| 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. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.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. | 
- 
                                                    .NETStandard 2.0- MySqlConnector (>= 2.3.7)
- Vitorm (>= 2.0.0-preview)
 
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated | 
|---|---|---|
| 2.5.0 | 148 | 1/12/2025 | 
| 2.4.0 | 142 | 12/29/2024 | 
| 2.3.0 | 151 | 11/18/2024 | 
| 2.2.2 | 139 | 11/4/2024 | 
| 2.2.1 | 142 | 11/2/2024 | 
| 2.2.0 | 151 | 10/10/2024 | 
| 2.2.0-preview3 | 126 | 9/23/2024 | 
| 2.2.0-preview2 | 130 | 9/21/2024 | 
| 2.2.0-preview | 129 | 9/11/2024 | 
| 2.1.2 | 136 | 8/31/2024 | 
| 2.1.1 | 136 | 8/29/2024 | 
| 2.1.1-preview | 144 | 8/28/2024 | 
| 2.1.0 | 179 | 8/25/2024 | 
| 2.0.5 | 175 | 8/22/2024 | 
| 2.0.4 | 165 | 8/15/2024 | 
| 2.0.3 | 163 | 8/9/2024 | 
| 2.0.2 | 123 | 7/29/2024 | 
| 2.0.1 | 131 | 7/22/2024 | 
| 2.0.1-preview | 140 | 7/21/2024 | 
| 2.0.0 | 140 | 7/14/2024 | 
| 2.0.0-preview | 122 | 7/14/2024 | 
| 1.2.0-preview | 116 | 7/14/2024 | 
| 1.1.0-preview | 136 | 7/7/2024 | 
| 1.0.1 | 145 | 6/18/2024 | 
| 1.0.0 | 162 | 6/16/2024 | 
| 1.0.0-preview | 128 | 6/16/2024 |