Lith 11 місяців тому
батько
коміт
aa7f16a096

+ 28 - 15
README.md

@@ -15,31 +15,44 @@ Vitorm: an simple orm by Vit.Linq
 
 | Db | Supported | Code | nuget |
 | -------- | -------- | -------- | -------- |
-| MySql     |    √  | [MySql](src/develop/src/Vitorm.MySql)     |  [Vitorm.MySql](https://www.nuget.org/packages/Vitorm.MySql)   |
-| SqlServer     |    √  | [SqlServer](src/develop/src/Vitorm.SqlServer)     |  [Vitorm.SqlServer](https://www.nuget.org/packages/Vitorm.SqlServer)   |
-| Sqlite     |    √  | [Sqlite](src/develop/src/Vitorm.Sqlite)     |  [Vitorm.Sqlite](https://www.nuget.org/packages/Vitorm.Sqlite)   |
-| ElasticSearch     |    ×  |      |      |
-| ClickHouse     |    ×  |      |      |
-| Oracle     |    ×  |      |      |
+| MySql         |   √   | [MySql](src/develop/src/Vitorm.MySql)             |  [Vitorm.MySql](https://www.nuget.org/packages/Vitorm.MySql)   |
+| SqlServer     |   √   | [SqlServer](src/develop/src/Vitorm.SqlServer)     |  [Vitorm.SqlServer](https://www.nuget.org/packages/Vitorm.SqlServer)   |
+| Sqlite        |   √   | [Sqlite](src/develop/src/Vitorm.Sqlite)           |  [Vitorm.Sqlite](https://www.nuget.org/packages/Vitorm.Sqlite)   |
+| ElasticSearch |      | [ElasticSearch](https://github.com/VitormLib/Vitorm.ElasticSearch)     |  [Vitorm.MySql](https://www.nuget.org/packages/Vitorm.ElasticSearch.MySql)   |
+| ClickHouse    |   ×   |      |      |
+| Oracle        |   ×   |      |      |
 
 
 
-Async
-TinyOrm
 
 
-
-
-Examples:  
+# Examples:  
 - [CRUD](test/Vitorm.Sqlite.MsTest/CommonTest/CRUD_Test.cs)    
-- [Query](test/Vitorm.Sqlite.MsTest/CommonTest/Query_Test.cs)  
-
+- [ExecuteDelete](test/Vitorm.Sqlite.MsTest/CommonTest/Orm_Extensions_ExecuteDelete_Test.cs)    
+- [ExecuteUpdate](test/Vitorm.Sqlite.MsTest/CommonTest/Orm_Extensions_ExecuteUpdate_Test.cs)    
+- [ToExecuteString](test/Vitorm.Sqlite.MsTest/CommonTest/Orm_Extensions_ToExecuteString_Test.cs)    
+    
+- [Query_LinqMethods](test/Vitorm.Sqlite.MsTest/CommonTest/Query_LinqMethods_Test.cs)  
+- [Query_Distinct](test/Vitorm.Sqlite.MsTest/CommonTest/Query_LinqMethods_Distinct_Test.cs)  
+    
+- [Query_String](test/Vitorm.Sqlite.MsTest/CommonTest/Query_Type_String_Test.cs)  
+- [Query_String_Like](test/Vitorm.Sqlite.MsTest/CommonTest/Query_Type_String_Like_Test.cs)  
+- [Query_String_Caculate](test/Vitorm.Sqlite.MsTest/CommonTest/Query_Type_String_Caculate_Test.cs)  
+    
+- [Query_Numric](test/Vitorm.Sqlite.MsTest/CommonTest/Query_Type_Numric_Test.cs)  
+- [Query_Numric_Caculate](test/Vitorm.Sqlite.MsTest/CommonTest/Query_Type_Numric_Caculate_Test.cs)  
+    
+- [Query_DateTime](test/Vitorm.Sqlite.MsTest/CommonTest/Query_Type_DateTime_Test.cs)  
+    
 - [InnerJoin_BySelectMany](test/Vitorm.Sqlite.MsTest/CommonTest/Query_InnerJoin_BySelectMany_Test.cs)  
 - [InnerJoin_ByJoin](test/Vitorm.Sqlite.MsTest/CommonTest/Query_InnerJoin_ByJoin_Test.cs)  
 - [LeftJoin_BySelectMany](test/Vitorm.Sqlite.MsTest/CommonTest/Query_LeftJoin_BySelectMany_Test.cs)  
 - [LeftJoin_ByGroupJoin](test/Vitorm.Sqlite.MsTest/CommonTest/Query_LeftJoin_ByGroupJoin_Test.cs)  
-
+    
 - [GroupBy](test/Vitorm.Sqlite.MsTest/CommonTest/Query_Group_Test.cs)  
 - [Transaction](test/Vitorm.Sqlite.MsTest/CommonTest/Transaction_Test.cs)  
-- [DbFunction](test/Vitorm.Sqlite.MsTest/CommonTest/DbFunction_Test.cs)  
+    
+- [MySql-DbFunction](test/Vitorm.MySql.MsTest/CustomTest/DbFunction_Test.cs)  
+- [SqlServer-DbFunction](test/Vitorm.SqlServer.MsTest/CustomTest/DbFunction_Test.cs)  
+- [Sqlite-DbFunction](test/Vitorm.Sqlite.MsTest/CustomTest/DbFunction_Test.cs)  
 

+ 1 - 1
doc/TODO.md

@@ -1,7 +1,7 @@
 
 # TODO
 
- - support ElasticSearch  
+ - support Async methods
  - support ClickHouse  
 
  - try to make it clean  

+ 1 - 1
test/Vitorm.MySql.MsTest/DbFunction_Test.cs → test/Vitorm.MySql.MsTest/CustomTest/DbFunction_Test.cs

@@ -2,7 +2,7 @@
 using Vit.Extensions.Vitorm_Extensions;
 using System.Data;
 
-namespace Vitorm.MsTest
+namespace Vitorm.MsTest.CustomTest
 {
 
     [TestClass]

+ 13 - 1
test/Vitorm.MySql.MsTest/DataSource.cs

@@ -16,13 +16,25 @@ namespace Vitorm.MsTest
 
         public int? fatherId { get; set; }
         public int? motherId { get; set; }
+
+        [System.ComponentModel.DataAnnotations.Schema.NotMapped]
+        public string test { get; set; }
+
+
+        public static User NewUser(int id) => new User { id = id, name = "testUser" + id };
+
+        public static List<User> NewUsers(int startId, int count = 1)
+        {
+            return Enumerable.Range(startId, count).Select(NewUser).ToList();
+        }
     }
 
 
     public class DataSource
     {
         static string connectionString = Appsettings.json.GetStringByPath("App.Db.ConnectionString");
- 
+        public static SqlDbContext CreateDbContextForWriting() => CreateDbContext();
+
         public static SqlDbContext CreateDbContext()
         {
             var dbContext = new SqlDbContext();

+ 2 - 2
test/Vitorm.SqlServer.MsTest/DbFunction_Test.cs → test/Vitorm.SqlServer.MsTest/CustomTest/DbFunction_Test.cs

@@ -2,7 +2,7 @@
 using Vit.Extensions.Vitorm_Extensions;
 using System.Data;
 
-namespace Vitorm.MsTest
+namespace Vitorm.MsTest.CustomTest
 {
 
     [TestClass]
@@ -17,7 +17,7 @@ namespace Vitorm.MsTest
 
             // select * from `User` as t0  where IIF(`t0`.`fatherId` is not null,true, false)
             {
-                var query = userQuery.Where(u => DbFunction.Call<int>("IIF", u.fatherId != null, 1, 0)==1);
+                var query = userQuery.Where(u => DbFunction.Call<int>("IIF", u.fatherId != null, 1, 0) == 1);
                 var sql = query.ToExecuteString();
                 var userList = query.ToList();
                 Assert.AreEqual(3, userList.Count);

+ 9 - 0
test/Vitorm.SqlServer.MsTest/DataSource.cs

@@ -24,6 +24,13 @@ namespace Vitorm.MsTest
 
         [System.ComponentModel.DataAnnotations.Schema.NotMapped]
         public string test{ get; set; }
+
+        public static User NewUser(int id) => new User { id = id, name = "testUser" + id };
+
+        public static List<User> NewUsers(int startId, int count = 1)
+        {
+            return Enumerable.Range(startId, count).Select(NewUser).ToList();
+        }
     }
 
 
@@ -31,6 +38,8 @@ namespace Vitorm.MsTest
     {
         static string connectionString = Appsettings.json.GetStringByPath("App.Db.ConnectionString");
 
+        public static SqlDbContext CreateDbContextForWriting() => CreateDbContext();
+
         public static SqlDbContext CreateDbContext()
         {
             var dbContext = new SqlDbContext();

+ 79 - 89
test/Vitorm.Sqlite.MsTest/CommonTest/CRUD_Test.cs

@@ -1,49 +1,53 @@
 using Microsoft.VisualStudio.TestTools.UnitTesting;
-using Vit.Extensions.Vitorm_Extensions;
+
 using System.Data;
 
 namespace Vitorm.MsTest.CommonTest
 {
 
     [TestClass]
-    public class CRUD_Test
+    public partial class CRUD_Test
     {
+        static DbContext CreateDbContext() => DataSource.CreateDbContextForWriting();
+
+
+
         #region #1 Create
 
         [TestMethod]
         public void Test_Create()
         {
-            var user = new User { id = 7, name = "testUser7", birth = DateTime.Now, fatherId = 1, motherId = 2 };
-            var user2 = new User { id = 8, name = "testUser8", birth = DateTime.Now, fatherId = 3, motherId = 4 };
+            using var dbContext = CreateDbContext();
 
-            // #1 Add
-            {
-                using var dbContext = DataSource.CreateDbContext();
-                var userQuery = dbContext.Query<User>();
+            var newUserList = User.NewUsers(7, 4);
 
-                dbContext.Add(user);
 
-                Assert.AreEqual(7, userQuery.Count());
-
-                var newUser = userQuery.FirstOrDefault(m => m.id == 7);
-                Assert.AreEqual(user.id, newUser?.id);
-                Assert.AreEqual(user.name, newUser?.name);
-            }
+            // #1 Add
+            dbContext.Add(newUserList[0]);
 
             // #2 AddRange
-            {
-                using var dbContext = DataSource.CreateDbContext();
-                var userQuery = dbContext.Query<User>();
+            dbContext.AddRange(newUserList.Skip(1));
+
 
-                dbContext.AddRange(new[] { user, user2 });
+            Thread.Sleep(1000);
 
-                Assert.AreEqual(8, userQuery.Count());
+            // assert
+            {
+                var userList = dbContext.Query<User>().Where(user => user.id >= 7).ToList();
+                Assert.AreEqual(newUserList.Count, userList.Count());
+                Assert.AreEqual(0, userList.Select(m => m.id).Except(newUserList.Select(m => m.id)).Count());
+                Assert.AreEqual(0, userList.Select(m => m.name).Except(newUserList.Select(m => m.name)).Count());
+            }
 
-                var newUsers = userQuery.Where(m => m.id >= 7).ToList();
-                Assert.AreEqual(2, newUsers.Count());
-                Assert.AreEqual(user.id, newUsers[0]?.id);
-                Assert.AreEqual(user2.id, newUsers[1]?.id);
+            try
+            {
+                dbContext.Add(newUserList[0]);
+                Assert.Fail("should not be able to add same key twice");
             }
+            catch (Exception ex)
+            {
+            }
+
 
         }
         #endregion
@@ -54,110 +58,96 @@ namespace Vitorm.MsTest.CommonTest
         [TestMethod]
         public void Test_Update()
         {
-            var birth = DateTime.Parse("2021-03-01 00:00:00");
-            var user = new User { id = 4, name = "testUser4", birth = birth, fatherId = 14 };
-            var user2 = new User { id = 5, name = "testUser5", birth = DateTime.Now, fatherId = 15 };
+            using var dbContext = CreateDbContext();
 
-            #region Update
+            // Update
             {
-                using var dbContext = DataSource.CreateDbContext();
-                var userQuery = dbContext.Query<User>();
-
-                var rowCount = dbContext.Update(user);
+                var rowCount = dbContext.Update(User.NewUser(4));
                 Assert.AreEqual(1, rowCount);
-
-                var newUser = userQuery.FirstOrDefault(m => m.id == 4);
-                Assert.AreEqual(4, newUser.id);
-                Assert.AreEqual(user.name, newUser.name);
-                Assert.AreEqual(user.birth, newUser.birth);
-                Assert.AreEqual(user.fatherId, newUser.fatherId);
             }
-            #endregion
 
-            #region UpdateRange
+            // UpdateRange
             {
-                using var dbContext = DataSource.CreateDbContext();
-                var userQuery = dbContext.Query<User>();
-
-                var rowCount = dbContext.UpdateRange(new[] { user, user2 });
+                var rowCount = dbContext.UpdateRange(User.NewUsers(5, 3));
                 Assert.AreEqual(2, rowCount);
+            }
+
+            Thread.Sleep(1000);
 
-                var newUsers = userQuery.Where(m => m.id == 4 || m.id == 5).ToList();
-                Assert.AreEqual(user.id, newUsers[0].id);
-                Assert.AreEqual(user.name, newUsers[0].name);
-                Assert.AreEqual(user2.id, newUsers[1].id);
-                Assert.AreEqual(user2.name, newUsers[1].name);
+            // assert
+            {
+                var newUserList = User.NewUsers(4, 3);
+                var userList = dbContext.Query<User>().Where(m => m.id >= 4).ToList();
+                Assert.AreEqual(newUserList.Count, userList.Count());
+                Assert.AreEqual(0, userList.Select(m => m.id).Except(newUserList.Select(m => m.id)).Count());
+                Assert.AreEqual(0, userList.Select(m => m.name).Except(newUserList.Select(m => m.name)).Count());
             }
-            #endregion
 
-        }
+            try
+            {
+                var newUser = User.NewUser(4);
+                var key = dbContext.GetEntityDescriptor(typeof(User)).key;
+                key.SetValue(newUser, null);
+                dbContext.Update(newUser);
+                Assert.Fail("should not be able to update entity with null key");
+            }
+            catch (Exception ex)
+            {
+            }
 
 
+        }
         #endregion
 
 
+
+
+
         #region #4 Delete
 
 
         [TestMethod]
         public void Test_Delete()
         {
+            using var dbContext = CreateDbContext();
 
-            #region #1 Delete
+            // #1 Delete
             {
-                using var dbContext = DataSource.CreateDbContext();
-                var userQuery = dbContext.Query<User>();
-
-                var rowCount = dbContext.Delete(new User { id = 5 });
-
+                var rowCount = dbContext.Delete(User.NewUser(1));
                 Assert.AreEqual(1, rowCount);
-                Assert.AreEqual(5, userQuery.Count());
             }
-            #endregion
 
-            #region #2 DeleteRange
+            // #2 DeleteRange
             {
-                using var dbContext = DataSource.CreateDbContext();
-                var userQuery = dbContext.Query<User>();
-
-                var rowCount = dbContext.DeleteRange(new[] { new User { id = 5 }, new User { id = 6 }, new User { id = 10 } });
-
+                var rowCount = dbContext.DeleteRange(User.NewUsers(2, 2));
                 Assert.AreEqual(2, rowCount);
-                Assert.AreEqual(4, userQuery.Count());
             }
-            #endregion
 
-            #region #3 DeleteByKey
+            // #3 DeleteByKey
             {
-                using var dbContext = DataSource.CreateDbContext();
-                var userQuery = dbContext.Query<User>();
-
-                var rowCount = dbContext.DeleteByKey<User>(4);
+                var user = User.NewUser(4);
+                var key = dbContext.GetEntityDescriptor(typeof(User)).key;
+                var keyValue=key.GetValue(user);
+                var rowCount = dbContext.DeleteByKey<User>(keyValue);
                 Assert.AreEqual(1, rowCount);
-                Assert.AreEqual(5, userQuery.Count());
             }
-            {
-                using var dbContext = DataSource.CreateDbContext();
-                var userQuery = dbContext.Query<User>();
 
-                var rowCount = dbContext.DeleteByKey<User>(7);
-                Assert.AreEqual(0, rowCount);
-                Assert.AreEqual(6, userQuery.Count());
+            // #4 DeleteByKeys
+            {
+                var users = User.NewUsers(5, 2);
+                var key = dbContext.GetEntityDescriptor(typeof(User)).key;
+                var keyValues = users.Select(user => key.GetValue(user));
+                var rowCount = dbContext.DeleteByKeys<User, object>(keyValues);
+                Assert.AreEqual(2, rowCount);
             }
-            #endregion
 
+            Thread.Sleep(1000);
 
-            #region #4 DeleteByKeys
+            // assert
             {
-                using var dbContext = DataSource.CreateDbContext();
-                var userSet = dbContext.DbSet<User>();
-
-                var rowCount = userSet.DeleteByKeys(new[] { 5, 6, 10 });
-
-                Assert.AreEqual(2, rowCount);
-                Assert.AreEqual(4, userSet.Query().Count());
+                var userList = dbContext.Query<User>().ToList();
+                Assert.AreEqual(0, userList.Count());
             }
-            #endregion
         }
         #endregion
 

+ 1 - 1
test/Vitorm.Sqlite.MsTest/DbFunction_Test.cs → test/Vitorm.Sqlite.MsTest/CustomTest/DbFunction_Test.cs

@@ -2,7 +2,7 @@
 using Vit.Extensions.Vitorm_Extensions;
 using System.Data;
 
-namespace Vitorm.MsTest
+namespace Vitorm.MsTest.CustomTest
 {
 
     [TestClass]

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

@@ -1,5 +1,5 @@
-using Vitorm.Sql;
-using Vit.Extensions;
+using Vit.Extensions;
+using Vitorm.Sql;
 
 namespace Vitorm.MsTest
 {
@@ -13,11 +13,23 @@ namespace Vitorm.MsTest
 
         public int? fatherId { get; set; }
         public int? motherId { get; set; }
+
+        [System.ComponentModel.DataAnnotations.Schema.NotMapped]
+        public string test { get; set; }
+
+
+        public static User NewUser(int id) => new User { id = id, name = "testUser" + id };
+
+        public static List<User> NewUsers(int startId, int count = 1)
+        {
+            return Enumerable.Range(startId, count).Select(NewUser).ToList();
+        }
     }
 
 
     public class DataSource
     {
+        public static SqlDbContext CreateDbContextForWriting() => CreateDbContext();
         public static SqlDbContext CreateDbContext()
         {
             var guid = Guid.NewGuid().ToString();