Lith 10 kuukautta sitten
vanhempi
commit
e352cbf410

+ 293 - 4
README.md

@@ -1,7 +1,11 @@
 
 # Vitorm
-Vitorm: an simple orm by Vit.Linq
->source address: [https://github.com/VitormLib/Vitorm](https://github.com/VitormLib/Vitorm "https://github.com/VitormLib/Vitorm")    
+Vitorm is a lightweight yet comprehensive ORM 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.
+> written by ChatGPT :  "Help me write a description for Vitorm. It is a lightweight ORM, similar to Dapper, but it is feature-rich, akin to EF. Please emphasize its lightweight nature and comprehensive functionality."    
+> source address: [https://github.com/VitormLib/Vitorm](https://github.com/VitormLib/Vitorm "https://github.com/VitormLib/Vitorm")        
 
 ![](https://img.shields.io/github/license/VitormLib/Vitorm.svg)  
 ![](https://img.shields.io/github/repo-size/VitormLib/Vitorm.svg)  ![](https://img.shields.io/github/last-commit/VitormLib/Vitorm.svg)  
@@ -19,14 +23,299 @@ Vitorm: an simple orm by Vit.Linq
 | SqlServer     |   √   | [SqlServer](src/develop/src/Vitorm.SqlServer)     |  [![](https://img.shields.io/nuget/v/Vitorm.SqlServer.svg)](https://www.nuget.org/packages/Vitorm.SqlServer) ![](https://img.shields.io/nuget/dt/Vitorm.SqlServer.svg)   |
 | Sqlite        |   √   | [Sqlite](src/develop/src/Vitorm.Sqlite)           |  [![](https://img.shields.io/nuget/v/Vitorm.Sqlite.svg)](https://www.nuget.org/packages/Vitorm.Sqlite) ![](https://img.shields.io/nuget/dt/Vitorm.Sqlite.svg)   |
 | ElasticSearch |   √   | [ElasticSearch](https://github.com/VitormLib/Vitorm.ElasticSearch)     |  [![](https://img.shields.io/nuget/v/Vitorm.ElasticSearch.svg)](https://www.nuget.org/packages/Vitorm.ElasticSearch) ![](https://img.shields.io/nuget/dt/Vitorm.ElasticSearch.svg)   |
-| ClickHouse    |   ×   |      |      |
+| ClickHouse    |   √   | [ClickHouse](https://github.com/VitormLib/Vitorm.ClickHouse)     |  [![](https://img.shields.io/nuget/v/Vitorm.ClickHouse.svg)](https://www.nuget.org/packages/Vitorm.ClickHouse) ![](https://img.shields.io/nuget/dt/Vitorm.ClickHouse.svg)   |
 | Oracle        |   ×   |      |      |
 
 
 
 
+# Vitorm Documentation
+This guide will walk you through the steps to set up and use Vitorm with SQLite.
 
-# Examples:  
+## Installation
+Before using Vitorm, install the necessary package:
+
+``` bash
+dotnet add package Vitorm.Sqlite
+```
+
+## Using Vitorm
+> This example provides a comprehensive guide to utilizing Vitorm for basic and advanced database operations while maintaining lightweight performance.
+``` csharp
+using Vit.Extensions.Vitorm_Extensions;
+using Vitorm;
+
+namespace App
+{
+    public class Program
+    {
+        static void Main(string[] args)
+        {
+            // #1 Create an empty SQLite database file and configures Vitorm
+            File.WriteAllBytes("sqlite.db", new byte[0]);
+            using var dbContext = new Vitorm.Sql.SqlDbContext();
+            dbContext.UseSqlite("data source=sqlite.db");
+
+            // #2 Create Table
+            dbContext.Drop<User>();
+            dbContext.Create<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();
+            }
+
+            // #9 Database Functions
+            {
+                // select * from User where IIF(t0.fatherId is not null, true, false);
+                var query = dbContext.Query<User>().Where(u => DbFunction.Call<bool>("IIF", u.fatherId != null, true, false));
+                var sql = query.ToExecuteString();
+                var userList = query.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; }
+        }
+    }
+}
+```
+
+## Explanation
+
+1. **Setup**: Initializes the SQLite database and configures Vitorm.
+2. **Create Table**: Drops and recreates the `User` table.
+3. **Insert Records**: Adds single and multiple user records.
+4. **Query Records**: Retrieves user records using various querying methods.
+5. **Update Records**: Updates single and multiple user records.
+6. **Delete Records**: Deletes single and multiple user records.
+7. **Join Queries**: Performs a join operation between user and father records.
+8. **Transactions**: Demonstrates nested transactions and rollback/commit operations.
+9. **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, install the necessary package:
+``` bash
+dotnet add package Vitorm.Data
+dotnet add package Vitorm.Sqlite
+```
+
+## Config settings
+``` json
+// appsettings.json
+{
+  "Vitorm": {
+    "Data": [
+      {
+        "provider": "Vitorm.Sqlite.DataProvider",
+        "assemblyFile": "Vitorm.Sqlite.dll",
+        "namespace": "App",
+        "connectionString": "data source=sqlite.db;"
+      }
+    ]
+  }
+}
+```
+
+
+## Using Vitorm.Data
+``` csharp
+ using Vit.Extensions.Vitorm_Extensions;
+using Vitorm;
+
+namespace App
+{
+    public class Program
+    {
+        static void Main(string[] args)
+        {
+            // #1 Create an empty SQLite database file and configures Vitorm.Data
+            File.WriteAllBytes("sqlite.db", new byte[0]);
+
+            // #2 Create Table
+            Data.Drop<User>();
+            Data.Create<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();
+            }
+
+            // #9 Database Functions
+            {
+                // select * from User where IIF(t0.fatherId is not null, true, false);
+                var query = Data.Query<User>().Where(u => DbFunction.Call<bool>("IIF", u.fatherId != null, true, false));
+                var sql = query.ToExecuteString();
+                var userList = query.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; }
+        }
+    }
+}
+```
+
+# Examples  
 - [CRUD](test/Vitorm.Sqlite.MsTest/CommonTest/CRUD_Test.cs)    
 - [ExecuteDelete](test/Vitorm.Sqlite.MsTest/CommonTest/Orm_Extensions_ExecuteDelete_Test.cs)    
 - [ExecuteUpdate](test/Vitorm.Sqlite.MsTest/CommonTest/Orm_Extensions_ExecuteUpdate_Test.cs)    

+ 5 - 3
src/Vitorm.MySql/DataProvider.cs

@@ -1,7 +1,9 @@
-using Vitorm.Sql;
-using Vit.Extensions;
+using System.Collections.Generic;
+
+using Vit.Extensions.Vitorm_Extensions;
+
 using Vitorm.DataProvider;
-using System.Collections.Generic;
+using Vitorm.Sql;
 
 namespace Vitorm.MySql
 {

+ 1 - 1
src/Vitorm.MySql/DbContext_Extensions.cs

@@ -4,7 +4,7 @@ using System.Data;
 using Vitorm.Sql;
 using Vitorm.Sql.SqlTranslate;
 
-namespace Vit.Extensions
+namespace Vit.Extensions.Vitorm_Extensions
 {
     public static class DbContext_Extensions
     {

+ 5 - 3
src/Vitorm.SqlServer/DataProvider.cs

@@ -1,7 +1,9 @@
-using Vitorm.Sql;
-using Vit.Extensions;
+using System.Collections.Generic;
+
+using Vit.Extensions.Vitorm_Extensions;
+
 using Vitorm.DataProvider;
-using System.Collections.Generic;
+using Vitorm.Sql;
 
 namespace Vitorm.SqlServer
 {

+ 1 - 1
src/Vitorm.SqlServer/DbContext_Extensions.cs

@@ -4,7 +4,7 @@ using System.Data;
 using Vitorm.Sql;
 using Vitorm.Sql.SqlTranslate;
 
-namespace Vit.Extensions
+namespace Vit.Extensions.Vitorm_Extensions
 {
     public static class DbContext_Extensions
     {

+ 5 - 3
src/Vitorm.Sqlite/DataProvider.cs

@@ -1,7 +1,9 @@
-using Vitorm.Sql;
-using Vit.Extensions;
+using System.Collections.Generic;
+
+using Vit.Extensions.Vitorm_Extensions;
+
 using Vitorm.DataProvider;
-using System.Collections.Generic;
+using Vitorm.Sql;
 
 namespace Vitorm.Sqlite
 {

+ 1 - 1
src/Vitorm.Sqlite/DbContext_Extensions.cs

@@ -4,7 +4,7 @@ using System.Data;
 using Vitorm.Sql;
 using Vitorm.Sql.SqlTranslate;
 
-namespace Vit.Extensions
+namespace Vit.Extensions.Vitorm_Extensions
 {
     public static class DbContext_Extensions
     {

+ 112 - 0
test/Vitorm.Data.Console/Program.cs

@@ -0,0 +1,112 @@
+using Vit.Extensions.Vitorm_Extensions;
+using Vitorm;
+
+namespace App
+{
+    public class Program
+    {
+        static void Main(string[] args)
+        {
+            // #1 Create an empty SQLite database file and configures Vitorm.Data
+            File.WriteAllBytes("sqlite.db", new byte[0]);
+
+            // #2 Create Table
+            Data.Drop<User>();
+            Data.Create<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();
+            }
+
+            // #9 Database Functions
+            {
+                // select * from User where IIF(t0.fatherId is not null, true, false);
+                var query = Data.Query<User>().Where(u => DbFunction.Call<bool>("IIF", u.fatherId != null, true, false));
+                var sql = query.ToExecuteString();
+                var userList = query.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; }
+        }
+    }
+}

+ 21 - 0
test/Vitorm.Data.Console/Vitorm.Data.Console.csproj

@@ -0,0 +1,21 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+    <PropertyGroup>
+        <OutputType>Exe</OutputType>
+        <TargetFramework>net6.0</TargetFramework>
+        <ImplicitUsings>enable</ImplicitUsings>
+        <Nullable>enable</Nullable>
+    </PropertyGroup>
+
+    <ItemGroup>
+        <ProjectReference Include="..\..\src\Vitorm.Data\Vitorm.Data.csproj" />
+        <ProjectReference Include="..\..\src\Vitorm.Sqlite\Vitorm.Sqlite.csproj" />
+    </ItemGroup>
+
+    <ItemGroup>
+        <None Update="appsettings.json">
+            <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+        </None>
+    </ItemGroup>
+
+</Project>

+ 12 - 0
test/Vitorm.Data.Console/appsettings.json

@@ -0,0 +1,12 @@
+{
+  "Vitorm": {
+    "Data": [
+      {
+        "provider": "Vitorm.Sqlite.DataProvider",
+        "assemblyFile": "Vitorm.Sqlite.dll",
+        "namespace": "App",
+        "connectionString": "data source=sqlite.db;"
+      }
+    ]
+  }
+}

+ 4 - 3
test/Vitorm.MySql.MsTest/DataSource.cs

@@ -1,6 +1,7 @@
-using Vitorm.Sql;
-using Vit.Extensions;
-using Vit.Core.Util.ConfigurationManager;
+using Vit.Core.Util.ConfigurationManager;
+using Vit.Extensions.Vitorm_Extensions;
+
+using Vitorm.Sql;
 
 namespace Vitorm.MsTest
 {

+ 4 - 3
test/Vitorm.SqlServer.MsTest/DataSource.cs

@@ -1,6 +1,7 @@
-using Vitorm.Sql;
-using Vit.Extensions;
-using Vit.Core.Util.ConfigurationManager;
+using Vit.Core.Util.ConfigurationManager;
+using Vit.Extensions.Vitorm_Extensions;
+
+using Vitorm.Sql;
 
 namespace Vitorm.MsTest
 {

+ 112 - 0
test/Vitorm.Sqlite.Console/Program.cs

@@ -0,0 +1,112 @@
+using Vit.Extensions.Vitorm_Extensions;
+using Vitorm;
+
+namespace App
+{
+    public class Program
+    {
+        static void Main(string[] args)
+        {
+            // #1 Create an empty SQLite database file and configures Vitorm
+            File.WriteAllBytes("sqlite.db", new byte[0]);
+            using var dbContext = new Vitorm.Sql.SqlDbContext();
+            dbContext.UseSqlite("data source=sqlite.db");
+
+            // #2 Create Table
+            dbContext.Drop<User>();
+            dbContext.Create<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();
+            }
+
+            // #9 Database Functions
+            {
+                // select * from User where IIF(t0.fatherId is not null, true, false);
+                var query = dbContext.Query<User>().Where(u => DbFunction.Call<bool>("IIF", u.fatherId != null, true, false));
+                var sql = query.ToExecuteString();
+                var userList = query.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; }
+        }
+    }
+}

+ 14 - 0
test/Vitorm.Sqlite.Console/Vitorm.Sqlite.Console.csproj

@@ -0,0 +1,14 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+    <PropertyGroup>
+        <OutputType>Exe</OutputType>
+        <TargetFramework>net6.0</TargetFramework>
+        <ImplicitUsings>enable</ImplicitUsings>
+        <Nullable>enable</Nullable>
+    </PropertyGroup>
+
+    <ItemGroup>
+        <ProjectReference Include="..\..\src\Vitorm.Sqlite\Vitorm.Sqlite.csproj" />
+    </ItemGroup>
+
+</Project>

+ 1 - 2
test/Vitorm.Sqlite.MsTest/DataSource.cs

@@ -1,4 +1,4 @@
-using Vit.Extensions;
+using Vit.Extensions.Vitorm_Extensions;
 
 using Vitorm.Sql;
 
@@ -101,7 +101,6 @@ namespace Vitorm.MsTest
             }
             #endregion
 
-
             return dbContext;
         }