Are you tired of choosing between simplicity and functionality when it comes to Object-Relational Mappers (ORMs)? Meet Vitorm, the lightweight yet comprehensive ORM designed to offer you the best of both worlds.
source address: https://github.com/Vit-Orm/Vitorm
What is Vitorm?
Vitorm is a lightweight ORM that strikes the perfect balance between simplicity and functionality. It’s inspired by the minimalist design of Dapper, offering an easy-to-use and efficient interface for data access. But Vitorm doesn’t stop there. It goes beyond the basic capabilities of lightweight ORMs to provide a rich feature set comparable to Entity Framework.
Why Choose Vitorm?
- Simplicity and Efficiency: With a design reminiscent of Dapper, Vitorm ensures you can quickly and efficiently perform data access tasks without the overhead of complex configurations.
- Robust Features: Similar to Entity Framework, Vitorm offers a comprehensive set of features, including advanced querying, relationship mapping, and change tracking.
- Performance: Get the high performance and speed you expect from a lightweight ORM while still enjoying the advanced capabilities typically found in more heavyweight solutions.
Key Features
- Easy-to-Use Interface: Intuitive and straightforward, making it accessible for developers of all skill levels.
- Advanced Querying: Supports complex queries, ensuring you can handle any data access scenario.
- Relationship Mapping: Easily manage relationships between entities, just like you would with more feature-rich ORMs.
Who Should Use Vitorm?
Vitorm is ideal for developers who want the performance and simplicity of Dapper but need the robust features and flexibility of Entity Framework. Whether you’re building a small project or a large-scale application, Vitorm provides a powerful yet streamlined solution that can adapt to your needs.
Join the conversation and start exploring what Vitorm can do for your next project. Happy coding!
Comparison of performance with other ORMs
Through benchmarks, there may be slight variations depending on the database source, for reference only.
code address: Vitorm.Data.Benchmark
SqlServer
Method | queryJoin | take | runner | Mean | Error | StdDev |
---|---|---|---|---|---|---|
Run | False | 1 | EntityFramework | 5.380 ms | 0.0449 ms | 0.0398 ms |
Run | False | 1 | SqlSuger | 4.929 ms | 0.0588 ms | 0.0550 ms |
Run | False | 1 | Vitorm | 4.925 ms | 0.0506 ms | 0.0474 ms |
Run | False | 1000 | EntityFramework | 6.009 ms | 0.0963 ms | 0.0853 ms |
Run | False | 1000 | SqlSuger | 5.616 ms | 0.1114 ms | 0.1488 ms |
Run | False | 1000 | Vitorm | 5.539 ms | 0.1060 ms | 0.1262 ms |
Run | True | 1 | EntityFramework | 5.453 ms | 0.0571 ms | 0.0534 ms |
Run | True | 1 | SqlSuger | 5.601 ms | 0.0477 ms | 0.0423 ms |
Run | True | 1 | Vitorm | 5.337 ms | 0.0596 ms | 0.0528 ms |
Run | True | 1000 | EntityFramework | 1,706.222 ms | 4.4435 ms | 3.9391 ms |
Run | True | 1000 | SqlSuger | 125.150 ms | 2.3678 ms | 2.3255 ms |
Run | True | 1000 | Vitorm | 21.027 ms | 0.3564 ms | 0.3334 ms |
MySql
Method | queryJoin | take | runner | Mean | Error | StdDev |
---|---|---|---|---|---|---|
Run | False | 1 | EntityFramework | 1,231.1 μs | 47.43 μs | 139.84 μs |
Run | False | 1 | SqlSuger | 873.7 μs | 22.33 μs | 65.49 μs |
Run | False | 1 | Vitorm | 636.7 μs | 21.15 μs | 62.37 μs |
Run | False | 1000 | EntityFramework | 4,764.8 μs | 56.52 μs | 52.87 μs |
Run | False | 1000 | SqlSuger | 1,906.4 μs | 33.21 μs | 42.00 μs |
Run | False | 1000 | Vitorm | 2,159.5 μs | 43.16 μs | 56.12 μs |
Run | True | 1 | EntityFramework | 1,775.0 μs | 35.01 μs | 80.45 μs |
Run | True | 1 | SqlSuger | 1,747.5 μs | 34.05 μs | 44.27 μs |
Run | True | 1 | Vitorm | 1,292.5 μs | 25.72 μs | 41.54 μs |
Run | True | 1000 | EntityFramework | 6,784.4 μs | 102.05 μs | 95.45 μs |
Run | True | 1000 | SqlSuger | 113,634.4 μs | 1,128.58 μs | 1,055.67 μs |
Run | True | 1000 | Vitorm | 3,175.2 μs | 62.02 μs | 88.95 μs |
Sqlite
Method | queryJoin | take | runner | Mean | Error | StdDev |
---|---|---|---|---|---|---|
Run | False | 1 | EntityFramework | 115.32 μs | 0.831 μs | 0.778 μs |
Run | False | 1 | SqlSuger | 81.66 μs | 0.747 μs | 0.699 μs |
Run | False | 1 | Vitorm | 45.64 μs | 0.350 μs | 0.328 μs |
Run | False | 1000 | EntityFramework | 1,386.81 μs | 13.684 μs | 12.800 μs |
Run | False | 1000 | SqlSuger | 674.82 μs | 4.938 μs | 4.619 μs |
Run | False | 1000 | Vitorm | 769.88 μs | 6.020 μs | 5.631 μs |
Run | True | 1 | EntityFramework | 220.27 μs | 1.916 μs | 1.793 μs |
Run | True | 1 | SqlSuger | 484.52 μs | 6.746 μs | 5.980 μs |
Run | True | 1 | Vitorm | 167.89 μs | 1.352 μs | 1.264 μs |
Run | True | 1000 | EntityFramework | 1,962.25 μs | 10.031 μs | 8.377 μs |
Run | True | 1000 | SqlSuger | 103,179.50 μs | 534.265 μs | 446.135 μs |
Run | True | 1000 | Vitorm | 1,684.39 μs | 21.895 μs | 18.283 μs |
Examples
Let's walk through the steps to set up and use Vitorm with SQLite.
Installation
Before using Vitorm, install the necessary package:
dotnet add package Vitorm.Sqlite
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.UseSqlite("data source=sqlite.db");
// #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; }
}
}
}
For full example please check here: Program.cs
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.Sqlite
Config settings
// appsettings.json
{
"Vitorm": {
"Data": [
{
"provider": "Sqlite",
"namespace": "App",
"connectionString": "data source=sqlite.db;"
}
]
}
}
Minimum viable demo
After configuring the
appsettings.json
file, you can directly perform queries without any additional configuration or initialization,Vitorm.Data
is 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; }
}
}
}
For full example please check here: Program.cs
Top comments (1)
Any questions or ideal or new feature wanted, please feel free to talk.