QueryTest_EntityFramework.cs 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. using Microsoft.EntityFrameworkCore;
  2. using Vit.Core.Util.ConfigurationManager;
  3. using Vitorm;
  4. namespace App.QueryTest
  5. {
  6. public class QueryTest_EntityFramework : IBenchmarkQuery
  7. {
  8. MyDbContext myDbContext = new MyDbContext();
  9. public IQueryable<User> GetQueryable() => myDbContext.users;
  10. public void Query(QueryConfig config)
  11. {
  12. for (int i = 0; i < config.repeatCount; i++)
  13. {
  14. if (config.queryJoin) QueryJoin(config.take);
  15. else Query(config.take);
  16. }
  17. }
  18. public void QueryJoin(int take)
  19. {
  20. var queryable = GetQueryable();
  21. var query =
  22. from user in queryable
  23. from father in queryable.Where(father => user.fatherId == father.id).DefaultIfEmpty()
  24. from mother in queryable.Where(mother => user.motherId == mother.id).DefaultIfEmpty()
  25. where user.id > 1
  26. orderby user.id
  27. select new
  28. {
  29. user,
  30. father,
  31. mother,
  32. testId = user.id + 100,
  33. hasFather = father.name != null ? true : false
  34. }
  35. ;
  36. query = query.Skip(1).Take(take);
  37. var userList = query.ToList();
  38. var rowCount = query.Count();
  39. if (rowCount != take) throw new Exception($"query failed, expected row count : {take} , actual count: {rowCount} ");
  40. }
  41. public void Query(int take)
  42. {
  43. var userSet = Data.Query<User>();
  44. var query1 =
  45. from user in userSet
  46. where user.id > 1
  47. orderby user.id
  48. select user;
  49. var query = query1.Skip(1).Take(take);
  50. var userList = query.ToList();
  51. var rowCount = query.Count();
  52. if (rowCount != take) throw new Exception($"query failed, expected row count : {take} , actual count: {rowCount} ");
  53. }
  54. public class MyDbContext : Microsoft.EntityFrameworkCore.DbContext
  55. {
  56. public Microsoft.EntityFrameworkCore.DbSet<User> users { get; set; }
  57. protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
  58. {
  59. var connectionString = Appsettings.json.GetStringByPath("Vitorm.Data[0].connectionString");
  60. optionsBuilder.UseSqlite(connectionString);
  61. }
  62. }
  63. // Entity Definition
  64. [System.ComponentModel.DataAnnotations.Schema.Table("User")]
  65. public class User
  66. {
  67. [System.ComponentModel.DataAnnotations.Key]
  68. public int id { get; set; }
  69. public string name { get; set; }
  70. public DateTime? birth { get; set; }
  71. public int? fatherId { get; set; }
  72. public int? motherId { get; set; }
  73. }
  74. }
  75. }