Lith 8 ay önce
ebeveyn
işleme
cc0082d7ea

+ 21 - 7
.github/workflows/ki_devops3_release.yml → .github/workflows/ki_devops3_build.yml

@@ -1,6 +1,6 @@
 # This is a basic workflow to help you get started with Actions
 
-name: ki_devops3_release
+name: ki_devops3_build
 
 # Controls when the action will run. 
 on:
@@ -18,12 +18,12 @@ on:
   # Allows you to run this workflow manually from the Actions tab
   workflow_dispatch:
   merge_group:
-    types: [code_test]
 
 # A workflow run is made up of one or more jobs that can run sequentially or in parallel
 jobs:
-  # This workflow contains a single job called "build"
-  build:
+
+  # This workflow contains a single job called "devops3_test"
+  devops3_test:
     # The type of runner that the job will run on
     runs-on: ubuntu-latest
 
@@ -36,16 +36,30 @@ jobs:
       - name: Run test
         run: |
            set -e
-           echo run test
+           echo call ./Publish/DevOps3/build-bash/10.Test.bash to test
 
            cd ./Publish/DevOps3/build-bash
            bash 10.Test.bash;
            echo run test succeed!
 
-      - name: Run startup.bash
+  # This workflow contains a single job called "devops3_build"
+  devops3_build:
+    # Requiring successful dependent jobs
+    needs: devops3_test
+
+    # The type of runner that the job will run on
+    runs-on: ubuntu-latest
+
+    # Steps represent a sequence of tasks that will be executed as part of the job
+    steps:
+      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
+      - uses: actions/checkout@v4
+
+      # Runs a set of commands using the runners shell
+      - name: Run build
         run: |
            set -e
-           echo start build
+           echo call ./Publish/DevOps3/github-bash/startup.bash to build
 
            export DOCKER_ImagePrefix="serset/"
            export DOCKER_USERNAME="${{ secrets.DOCKER_USERNAME  }}"

+ 3 - 4
.github/workflows/ki_devops3_test.yml

@@ -21,12 +21,11 @@ on:
   pull_request:
     types: [opened, synchronize, reopened]
   merge_group:
-    types: [code_test]
 
 # A workflow run is made up of one or more jobs that can run sequentially or in parallel
 jobs:
-  # This workflow contains a single job called "build"
-  build:
+  # This workflow contains a single job called "devops3_test"
+  devops3_test:
     # The type of runner that the job will run on
     runs-on: ubuntu-latest
 
@@ -39,7 +38,7 @@ jobs:
       - name: Run test
         run: |
            set -e
-           echo run test
+           echo call ./Publish/DevOps3/build-bash/10.Test.bash to test
 
            cd ./Publish/DevOps3/build-bash
            bash 10.Test.bash;

+ 1 - 1
README.md

@@ -12,7 +12,7 @@ This means you get the best of both worlds: the performance and simplicity of Da
 
 | Build | NuGet |
 | -------- | -------- |
-|![](https://github.com/Vit-Orm/Vitorm/workflows/ki_devops3/badge.svg) | [![](https://img.shields.io/nuget/v/Vitorm.svg)](https://www.nuget.org/packages/Vitorm) ![](https://img.shields.io/nuget/dt/Vitorm.svg) |
+|![](https://github.com/Vit-Orm/Vitorm/workflows/ki_devops3_build/badge.svg) | [![](https://img.shields.io/nuget/v/Vitorm.svg)](https://www.nuget.org/packages/Vitorm) ![](https://img.shields.io/nuget/dt/Vitorm.svg) |
 
 
 

+ 5 - 0
doc/ReleaseLog.md

@@ -1,5 +1,10 @@
 # Vitorm ReleaseLog
 
+-----------------------
+# 2.1.2
+- [Vitorm.Data] add DataSource class, change methods to instance from static
+
+
 -----------------------
 # 2.1.0
 - block query from different data source

+ 2 - 2
src/Versions.props

@@ -1,6 +1,6 @@
 <Project>
     <PropertyGroup>
-        <Version>2.1.2-dev</Version>
-        <VitLinq_Version>[3.1.1, 3.2.0)</VitLinq_Version>
+        <Version>2.1.2</Version>
+        <VitLinq_Version>[3.1.2, 3.2.0)</VitLinq_Version>
     </PropertyGroup>
 </Project>

+ 202 - 0
src/Vitorm.Data/Data.DataSource.cs

@@ -0,0 +1,202 @@
+using System;
+using System.Collections.Concurrent;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+using Vit.Core.Util.ConfigurationManager;
+using Vit.Core.Util.Reflection;
+using Vit.Linq;
+
+using Vitorm.DataProvider;
+
+namespace Vitorm
+{
+    public partial class Data
+    {
+        public partial class DataSource
+        {
+
+            /// <summary>
+            /// Data.Init("appsettings.Development.json")
+            /// </summary>
+            /// <param name="appsettingsFileName"></param>
+            public DataSource LoadDataProviders(string appsettingsFileName)
+            {
+                LoadDataProviders(new JsonFile(appsettingsFileName));
+                return this;
+            }
+
+            public DataSource LoadDataProviders(JsonFile json, string configPath = "Vitorm.Data")
+            {
+                var dataProviderConfigs = json.GetByPath<List<Dictionary<string, object>>>(configPath);
+                return LoadDataProviders(dataProviderConfigs);
+            }
+            public DataSource LoadDataProviders(IEnumerable<Dictionary<string, object>> dataProviderConfigs)
+            {
+                var dataProviders = dataProviderConfigs?.Select(CreateDataProvider).NotNull().ToList();
+
+                if (dataProviders?.Any() == true) providerCache.AddRange(dataProviders);
+
+                providerMap.Clear();
+
+                return this;
+            }
+
+            public bool LoadDataProvider(Dictionary<string, object> dataProviderConfig)
+            {
+                var provider = CreateDataProvider(dataProviderConfig);
+                if (provider == null) return false;
+
+                providerCache.Insert(0, provider);
+                providerMap.Clear();
+                return true;
+            }
+            public void ClearDataProviders(Predicate<DataProviderCache> predicate = null)
+            {
+                if (predicate != null)
+                    providerCache.RemoveAll(predicate);
+                else
+                    providerCache.Clear();
+
+                providerMap.Clear();
+            }
+
+
+            #region LoadDataProvider
+
+            public IDataProvider DataProvider<Entity>() => DataProvider(typeof(Entity));
+            public IDataProvider DataProvider(Type entityType)
+            {
+                return providerMap.GetOrAdd(entityType, GetDataProviderFromConfig);
+
+                IDataProvider GetDataProviderFromConfig(Type entityType)
+                {
+                    var classFullName = entityType.FullName;
+                    return providerCache.FirstOrDefault(cache => cache.Match(classFullName))?.dataProvider
+                        ?? throw new NotImplementedException("can not find config for type: " + classFullName);
+                }
+            }
+
+            /// <summary>
+            /// dataProviderName:  dataProviderName or dataProviderNamespace
+            /// </summary>
+            /// <param name="dataProviderName"></param>
+            /// <returns></returns>
+            public IDataProvider DataProvider(string dataProviderName)
+            {
+                return providerCache.FirstOrDefault(cache => cache.name == dataProviderName || cache.@namespace == dataProviderName)?.dataProvider;
+            }
+
+
+            readonly ConcurrentDictionary<Type, IDataProvider> providerMap = new();
+
+            readonly List<DataProviderCache> providerCache = new();
+
+
+            DataProviderCache CreateDataProvider(Dictionary<string, object> dataProviderConfig)
+            {
+                /*
+                "provider": "Vitorm.Sqlite.DataProvider",
+                "assemblyName": "Vitorm.Sqlite",
+                "assemblyFile": "Vitorm.Sqlite.dll",
+                 */
+
+                object temp;
+                string provider = dataProviderConfig.TryGetValue("provider", out temp) ? temp as string : null;
+                string assemblyName = dataProviderConfig.TryGetValue("assemblyName", out temp) ? temp as string : null;
+                string assemblyFile = dataProviderConfig.TryGetValue("assemblyFile", out temp) ? temp as string : null;
+
+                Type providerType;
+                IDataProvider dataProvider;
+
+                // #1 load
+                providerType = ObjectLoader.GetType(className: provider, assemblyName: assemblyName, assemblyFile: assemblyFile);
+                dataProvider = providerType?.GetConstructor(Type.EmptyTypes)?.Invoke(new object[] { }) as IDataProvider;
+
+                // #2 try load by database type (Sqlite/MySql/SqlServer)
+                if (dataProvider == null)
+                {
+                    providerType = ObjectLoader.GetType(className: $"Vitorm.{provider}.DataProvider", assemblyName: $"Vitorm.{provider}", assemblyFile: $"Vitorm.{provider}.dll");
+                    dataProvider = providerType?.GetConstructor(Type.EmptyTypes)?.Invoke(new object[] { }) as IDataProvider;
+                }
+
+
+                if (dataProvider == null) return null;
+
+                dataProvider.Init(dataProviderConfig);
+                return new DataProviderCache(dataProvider, dataProviderConfig);
+            }
+
+
+            #endregion
+
+
+
+
+            #region CRUD Sync
+
+            // #0 Schema :  TryCreateTable TryDropTable
+            public void TryCreateTable<Entity>() => DataProvider<Entity>().TryCreateTable<Entity>();
+            public void TryDropTable<Entity>() => DataProvider<Entity>().TryDropTable<Entity>();
+            public void Truncate<Entity>() => DataProvider<Entity>().Truncate<Entity>();
+
+
+            // #1 Create :  Add AddRange
+            public Entity Add<Entity>(Entity entity) => DataProvider<Entity>().Add<Entity>(entity);
+            public void AddRange<Entity>(IEnumerable<Entity> entities) => DataProvider<Entity>().AddRange<Entity>(entities);
+
+            // #2 Retrieve : Get Query
+            public Entity Get<Entity>(object keyValue) => DataProvider<Entity>().Get<Entity>(keyValue);
+            public IQueryable<Entity> Query<Entity>() => DataProvider<Entity>().Query<Entity>();
+
+
+            // #3 Update: Update UpdateRange
+            public int Update<Entity>(Entity entity) => DataProvider<Entity>().Update<Entity>(entity);
+            public int UpdateRange<Entity>(IEnumerable<Entity> entities) => DataProvider<Entity>().UpdateRange<Entity>(entities);
+
+
+            // #4 Delete : Delete DeleteRange DeleteByKey DeleteByKeys
+            public int Delete<Entity>(Entity entity) => DataProvider<Entity>().Delete<Entity>(entity);
+            public int DeleteRange<Entity>(IEnumerable<Entity> entities) => DataProvider<Entity>().DeleteRange<Entity>(entities);
+
+            public int DeleteByKey<Entity>(object keyValue) => DataProvider<Entity>().DeleteByKey<Entity>(keyValue);
+            public int DeleteByKeys<Entity, Key>(IEnumerable<Key> keys) => DataProvider<Entity>().DeleteByKeys<Entity, Key>(keys);
+
+            #endregion
+
+
+
+            #region CRUD Async
+
+            // #0 Schema :  TryCreateTable TryDropTable
+            public Task TryCreateTableAsync<Entity>() => DataProvider<Entity>().TryCreateTableAsync<Entity>();
+            public Task TryDropTableAsync<Entity>() => DataProvider<Entity>().TryDropTableAsync<Entity>();
+            public Task TruncateAsync<Entity>() => DataProvider<Entity>().TruncateAsync<Entity>();
+
+
+            // #1 Create :  Add AddRange
+            public Task<Entity> AddAsync<Entity>(Entity entity) => DataProvider<Entity>().AddAsync<Entity>(entity);
+            public Task AddRangeAsync<Entity>(IEnumerable<Entity> entities) => DataProvider<Entity>().AddRangeAsync<Entity>(entities);
+
+            // #2 Retrieve : Get Query
+            public Task<Entity> GetAsync<Entity>(object keyValue) => DataProvider<Entity>().GetAsync<Entity>(keyValue);
+
+
+            // #3 Update: Update UpdateRange
+            public Task<int> UpdateAsync<Entity>(Entity entity) => DataProvider<Entity>().UpdateAsync<Entity>(entity);
+            public Task<int> UpdateRangeAsync<Entity>(IEnumerable<Entity> entities) => DataProvider<Entity>().UpdateRangeAsync<Entity>(entities);
+
+
+            // #4 Delete : Delete DeleteRange DeleteByKey DeleteByKeys
+            public Task<int> DeleteAsync<Entity>(Entity entity) => DataProvider<Entity>().DeleteAsync<Entity>(entity);
+            public Task<int> DeleteRangeAsync<Entity>(IEnumerable<Entity> entities) => DataProvider<Entity>().DeleteRangeAsync<Entity>(entities);
+
+            public Task<int> DeleteByKeyAsync<Entity>(object keyValue) => DataProvider<Entity>().DeleteByKeyAsync<Entity>(keyValue);
+            public Task<int> DeleteByKeysAsync<Entity, Key>(IEnumerable<Key> keys) => DataProvider<Entity>().DeleteByKeysAsync<Entity, Key>(keys);
+
+            #endregion
+
+        }
+    }
+}

+ 0 - 217
src/Vitorm.Data/Data.cs

@@ -1,217 +0,0 @@
-using System;
-using System.Collections.Concurrent;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-
-using Vit.Core.Util.ConfigurationManager;
-using Vit.Core.Util.Reflection;
-using Vit.Linq;
-
-using Vitorm.DataProvider;
-using Vitorm.Entity;
-
-namespace Vitorm
-{
-    public partial class Data
-    {
-        static Data()
-        {
-            Init(Appsettings.json);
-        }
-        /// <summary>
-        /// Data.Init("appsettings.Development.json")
-        /// </summary>
-        /// <param name="appsettingsFileName"></param>
-        public static void Init(string appsettingsFileName)
-        {
-            Init(new JsonFile(appsettingsFileName));
-        }
-        public static void Init(JsonFile json)
-        {
-            #region #1 load dataProvider
-            {
-                var dataSourceConfigs = json.GetByPath<List<Dictionary<string, object>>>("Vitorm.Data");
-                var dataProviders = dataSourceConfigs?.Select(CreateDataProvider).NotNull().ToList();
-
-                if (dataProviders?.Any() == true) providerCache.AddRange(dataProviders);
-            }
-            #endregion
-
-
-            #region #2 load entityLoader
-            {
-                var configs = json.GetByPath<List<Dictionary<string, object>>>("Vitorm.EntityLoader");
-                configs?.ForEach(config =>
-                {
-                    object temp;
-                    string className = config.TryGetValue("className", out temp) ? temp as string : null;
-                    string assemblyFile = config.TryGetValue("assemblyFile", out temp) ? temp as string : null;
-                    string assemblyName = config.TryGetValue("assemblyName", out temp) ? temp as string : null;
-
-                    int index = config.TryGetValue("index", out temp) && temp is int i ? i : 0;
-
-                    var entityLoader = ObjectLoader.CreateInstance(className, assemblyFile: assemblyFile, assemblyName: assemblyName) as IEntityLoader;
-                    if (entityLoader == null) return;
-
-                    EntityLoaders.Instance.loaders.Insert(index, entityLoader);
-                });
-            }
-            #endregion
-        }
-
-        public static bool AddDataSource(Dictionary<string, object> dataSourceConfig)
-        {
-            var provider = CreateDataProvider(dataSourceConfig);
-            if (provider == null) return false;
-
-            providerCache.Insert(0, provider);
-            providerMap.Clear();
-            return true;
-        }
-        public static void ClearDataSource(Predicate<DataProviderCache> predicate = null)
-        {
-            if (predicate != null)
-                providerCache.RemoveAll(predicate);
-            else
-                providerCache.Clear();
-            providerMap.Clear();
-        }
-
-
-        #region LoadDataProvider
-
-        public static IDataProvider DataProvider<Entity>() => DataProvider(typeof(Entity));
-        public static IDataProvider DataProvider(Type entityType)
-        {
-            return providerMap.GetOrAdd(entityType, GetDataProviderFromConfig);
-
-            static IDataProvider GetDataProviderFromConfig(Type entityType)
-            {
-                var classFullName = entityType.FullName;
-                return providerCache.FirstOrDefault(cache => cache.Match(classFullName))?.dataProvider
-                    ?? throw new NotImplementedException("can not find config for type: " + classFullName);
-            }
-        }
-
-        /// <summary>
-        /// dataProviderName:  dataProviderName or dataProviderNamespace
-        /// </summary>
-        /// <param name="dataProviderName"></param>
-        /// <returns></returns>
-        public static IDataProvider DataProvider(string dataProviderName)
-        {
-            return providerCache.FirstOrDefault(cache => cache.name == dataProviderName || cache.@namespace == dataProviderName)?.dataProvider;
-        }
-
-
-        static readonly ConcurrentDictionary<Type, IDataProvider> providerMap = new();
-
-        static readonly List<DataProviderCache> providerCache = new();
-
-
-        static DataProviderCache CreateDataProvider(Dictionary<string, object> dataSourceConfig)
-        {
-            /*
-            "provider": "Vitorm.Sqlite.DataProvider",
-            "assemblyName": "Vitorm.Sqlite",
-            "assemblyFile": "Vitorm.Sqlite.dll",
-             */
-
-            object temp;
-            string provider = dataSourceConfig.TryGetValue("provider", out temp) ? temp as string : null;
-            string assemblyName = dataSourceConfig.TryGetValue("assemblyName", out temp) ? temp as string : null;
-            string assemblyFile = dataSourceConfig.TryGetValue("assemblyFile", out temp) ? temp as string : null;
-
-            Type providerType;
-            IDataProvider dataProvider;
-
-            // #1 load
-            providerType = ObjectLoader.GetType(className: provider, assemblyName: assemblyName, assemblyFile: assemblyFile);
-            dataProvider = providerType?.GetConstructor(Type.EmptyTypes)?.Invoke(new object[] { }) as IDataProvider;
-
-            // #2 try load by database type (Sqlite/MySql/SqlServer)
-            if (dataProvider == null)
-            {
-                providerType = ObjectLoader.GetType(className: $"Vitorm.{provider}.DataProvider", assemblyName: $"Vitorm.{provider}", assemblyFile: $"Vitorm.{provider}.dll");
-                dataProvider = providerType?.GetConstructor(Type.EmptyTypes)?.Invoke(new object[] { }) as IDataProvider;
-            }
-
-
-            if (dataProvider == null) return null;
-
-            dataProvider.Init(dataSourceConfig);
-            return new DataProviderCache(dataProvider, dataSourceConfig);
-        }
-
-
-        #endregion
-
-
-
-
-        #region CRUD Sync
-
-        // #0 Schema :  TryCreateTable TryDropTable
-        public static void TryCreateTable<Entity>() => DataProvider<Entity>().TryCreateTable<Entity>();
-        public static void TryDropTable<Entity>() => DataProvider<Entity>().TryDropTable<Entity>();
-        public static void Truncate<Entity>() => DataProvider<Entity>().Truncate<Entity>();
-
-
-        // #1 Create :  Add AddRange
-        public static Entity Add<Entity>(Entity entity) => DataProvider<Entity>().Add<Entity>(entity);
-        public static void AddRange<Entity>(IEnumerable<Entity> entities) => DataProvider<Entity>().AddRange<Entity>(entities);
-
-        // #2 Retrieve : Get Query
-        public static Entity Get<Entity>(object keyValue) => DataProvider<Entity>().Get<Entity>(keyValue);
-        public static IQueryable<Entity> Query<Entity>() => DataProvider<Entity>().Query<Entity>();
-
-
-        // #3 Update: Update UpdateRange
-        public static int Update<Entity>(Entity entity) => DataProvider<Entity>().Update<Entity>(entity);
-        public static int UpdateRange<Entity>(IEnumerable<Entity> entities) => DataProvider<Entity>().UpdateRange<Entity>(entities);
-
-
-        // #4 Delete : Delete DeleteRange DeleteByKey DeleteByKeys
-        public static int Delete<Entity>(Entity entity) => DataProvider<Entity>().Delete<Entity>(entity);
-        public static int DeleteRange<Entity>(IEnumerable<Entity> entities) => DataProvider<Entity>().DeleteRange<Entity>(entities);
-
-        public static int DeleteByKey<Entity>(object keyValue) => DataProvider<Entity>().DeleteByKey<Entity>(keyValue);
-        public static int DeleteByKeys<Entity, Key>(IEnumerable<Key> keys) => DataProvider<Entity>().DeleteByKeys<Entity, Key>(keys);
-
-        #endregion
-
-
-
-        #region CRUD Async
-
-        // #0 Schema :  TryCreateTable TryDropTable
-        public static Task TryCreateTableAsync<Entity>() => DataProvider<Entity>().TryCreateTableAsync<Entity>();
-        public static Task TryDropTableAsync<Entity>() => DataProvider<Entity>().TryDropTableAsync<Entity>();
-        public static Task TruncateAsync<Entity>() => DataProvider<Entity>().TruncateAsync<Entity>();
-
-
-        // #1 Create :  Add AddRange
-        public static Task<Entity> AddAsync<Entity>(Entity entity) => DataProvider<Entity>().AddAsync<Entity>(entity);
-        public static Task AddRangeAsync<Entity>(IEnumerable<Entity> entities) => DataProvider<Entity>().AddRangeAsync<Entity>(entities);
-
-        // #2 Retrieve : Get Query
-        public static Task<Entity> GetAsync<Entity>(object keyValue) => DataProvider<Entity>().GetAsync<Entity>(keyValue);
-
-
-        // #3 Update: Update UpdateRange
-        public static Task<int> UpdateAsync<Entity>(Entity entity) => DataProvider<Entity>().UpdateAsync<Entity>(entity);
-        public static Task<int> UpdateRangeAsync<Entity>(IEnumerable<Entity> entities) => DataProvider<Entity>().UpdateRangeAsync<Entity>(entities);
-
-
-        // #4 Delete : Delete DeleteRange DeleteByKey DeleteByKeys
-        public static Task<int> DeleteAsync<Entity>(Entity entity) => DataProvider<Entity>().DeleteAsync<Entity>(entity);
-        public static Task<int> DeleteRangeAsync<Entity>(IEnumerable<Entity> entities) => DataProvider<Entity>().DeleteRangeAsync<Entity>(entities);
-
-        public static Task<int> DeleteByKeyAsync<Entity>(object keyValue) => DataProvider<Entity>().DeleteByKeyAsync<Entity>(keyValue);
-        public static Task<int> DeleteByKeysAsync<Entity, Key>(IEnumerable<Key> keys) => DataProvider<Entity>().DeleteByKeysAsync<Entity, Key>(keys);
-
-        #endregion
-
-    }
-}

+ 1 - 1
src/Vitorm.Data/README.md

@@ -12,7 +12,7 @@ This means you get the best of both worlds: the performance and simplicity of Da
 
 | Build | NuGet |
 | -------- | -------- |
-|![](https://github.com/Vit-Orm/Vitorm/workflows/ki_devops3/badge.svg) | [![](https://img.shields.io/nuget/v/Vitorm.Data.svg)](https://www.nuget.org/packages/Vitorm.Data) ![](https://img.shields.io/nuget/dt/Vitorm.Data.svg) |
+|![](https://github.com/Vit-Orm/Vitorm/workflows/ki_devops3_build/badge.svg) | [![](https://img.shields.io/nuget/v/Vitorm.Data.svg)](https://www.nuget.org/packages/Vitorm.Data) ![](https://img.shields.io/nuget/dt/Vitorm.Data.svg) |
 
 
 

+ 1 - 1
src/Vitorm.EntityGenerate/README.md

@@ -9,7 +9,7 @@ Library to generate Entity Type from Database
 
 | Build | NuGet |
 | -------- | -------- |
-|![](https://github.com/Vit-Orm/Vitorm/workflows/ki_devops3/badge.svg) | [![](https://img.shields.io/nuget/v/Vitorm.EntityGenerate.svg)](https://www.nuget.org/packages/Vitorm.EntityGenerate) ![](https://img.shields.io/nuget/dt/Vitorm.EntityGenerate.svg) |
+|![](https://github.com/Vit-Orm/Vitorm/workflows/ki_devops3_build/badge.svg) | [![](https://img.shields.io/nuget/v/Vitorm.EntityGenerate.svg)](https://www.nuget.org/packages/Vitorm.EntityGenerate) ![](https://img.shields.io/nuget/dt/Vitorm.EntityGenerate.svg) |
 
 
 

+ 1 - 1
src/Vitorm.MySql/README.md

@@ -12,7 +12,7 @@ This means you get the best of both worlds: the performance and simplicity of Da
 
 | Build | NuGet |
 | -------- | -------- |
-|![](https://github.com/Vit-Orm/Vitorm/workflows/ki_devops3/badge.svg) | [![](https://img.shields.io/nuget/v/Vitorm.MySql.svg)](https://www.nuget.org/packages/Vitorm.MySql) ![](https://img.shields.io/nuget/dt/Vitorm.MySql.svg) |
+|![](https://github.com/Vit-Orm/Vitorm/workflows/ki_devops3_build/badge.svg) | [![](https://img.shields.io/nuget/v/Vitorm.MySql.svg)](https://www.nuget.org/packages/Vitorm.MySql) ![](https://img.shields.io/nuget/dt/Vitorm.MySql.svg) |
 
 
 

+ 1 - 1
src/Vitorm.SqlServer/README.md

@@ -12,7 +12,7 @@ This means you get the best of both worlds: the performance and simplicity of Da
 
 | Build | NuGet |
 | -------- | -------- |
-|![](https://github.com/Vit-Orm/Vitorm/workflows/ki_devops3/badge.svg) | [![](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) |
+|![](https://github.com/Vit-Orm/Vitorm/workflows/ki_devops3_build/badge.svg) | [![](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) |
 
 
 

+ 1 - 1
src/Vitorm.Sqlite/README.md

@@ -12,7 +12,7 @@ This means you get the best of both worlds: the performance and simplicity of Da
 
 | Build | NuGet |
 | -------- | -------- |
-|![](https://github.com/Vit-Orm/Vitorm/workflows/ki_devops3/badge.svg) | [![](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) |
+|![](https://github.com/Vit-Orm/Vitorm/workflows/ki_devops3_build/badge.svg) | [![](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) |