Runner_Vitorm.cs 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. using App.OrmRunner.VitormRunner;
  2. using Vitorm;
  3. namespace App.OrmRunner
  4. {
  5. public partial class Runner_Vitorm : IRunner
  6. {
  7. public void Run(RunConfig config)
  8. {
  9. for (int i = 0; i < config.repeatCount; i++)
  10. {
  11. var userQuery = Data.Query<User>();
  12. if (config.queryJoin) QueryExecute.QueryJoin(userQuery, config);
  13. else QueryExecute.Query(userQuery, config);
  14. }
  15. }
  16. }
  17. }
  18. namespace App.OrmRunner.VitormRunner
  19. {
  20. // Entity Definition
  21. [System.ComponentModel.DataAnnotations.Schema.Table("User")]
  22. public class User
  23. {
  24. [System.ComponentModel.DataAnnotations.Key]
  25. public int id { get; set; }
  26. public string name { get; set; }
  27. public DateTime? birth { get; set; }
  28. public int? fatherId { get; set; }
  29. public int? motherId { get; set; }
  30. }
  31. public class QueryExecute
  32. {
  33. public static void QueryJoin(IQueryable<User> userSet, RunConfig config)
  34. {
  35. var query =
  36. from user in userSet
  37. from father in userSet.Where(father => user.fatherId == father.id).DefaultIfEmpty()
  38. from mother in userSet.Where(mother => user.motherId == mother.id).DefaultIfEmpty()
  39. where user.id > 1 && user.id < 10000
  40. orderby user.id
  41. select new
  42. {
  43. user,
  44. father,
  45. mother,
  46. testId = user.id + 100,
  47. hasFather = father.name != null ? true : false
  48. }
  49. ;
  50. Execute(query, config);
  51. }
  52. public static void Query(IQueryable<User> userSet, RunConfig config)
  53. {
  54. var query =
  55. from user in userSet
  56. where user.id > 1 && user.id < 10000
  57. orderby user.id
  58. select user;
  59. Execute(query, config);
  60. }
  61. public static void Execute<Result>(IQueryable<Result> query, RunConfig config)
  62. {
  63. if (config.skip > 0) query = query.Skip(config.skip.Value);
  64. query = query.Take(config.take);
  65. if (config.executeQuery)
  66. {
  67. var userList = query.ToList();
  68. var rowCount = userList.Count();
  69. if (rowCount != config.take) throw new Exception($"query failed, expected row count : {config.take} , actual count: {rowCount} ");
  70. }
  71. else
  72. {
  73. var sql = query.ToExecuteString();
  74. if (string.IsNullOrEmpty(sql)) throw new Exception($"query failed, can not generated sql script");
  75. }
  76. }
  77. }
  78. }