Property_Guid_Test.cs 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. using System.ComponentModel.DataAnnotations;
  2. using Microsoft.VisualStudio.TestTools.UnitTesting;
  3. namespace Vitorm.MsTest.CustomTest
  4. {
  5. /// <summary>
  6. /// https://www.damirscorner.com/blog/posts/20240223-GuidValuesInMySqlWithEfCore.html
  7. /// need to add "GuidFormat=Binary16;" to connection string if using Guid
  8. ///
  9. /// </summary>
  10. [TestClass]
  11. public class Property_Guid_Test
  12. {
  13. [TestMethod]
  14. public void Test()
  15. {
  16. using var dbContext = DataSource.CreateDbContext();
  17. var dbSet = dbContext.DbSet<UserInfo>();
  18. dbSet.TryDropTable();
  19. dbSet.TryCreateTable();
  20. Guid guid; UserInfo user;
  21. {
  22. user = dbSet.Add(new UserInfo { name = "user1" });
  23. user = dbSet.Add(new UserInfo { name = "user2" });
  24. guid = user.guid;
  25. }
  26. DataSource.WaitForUpdate();
  27. {
  28. user = dbSet.Get(guid);
  29. Assert.AreEqual("user2", user?.name);
  30. }
  31. }
  32. class UserInfo
  33. {
  34. [Key]
  35. public Guid guid { get; set; } = Guid.NewGuid();
  36. public string name { get; set; }
  37. }
  38. [TestMethod]
  39. public void Test2()
  40. {
  41. using var dbContext = DataSource.CreateDbContext();
  42. var dbSet = dbContext.DbSet<UserInfo2>();
  43. dbSet.TryDropTable();
  44. dbSet.TryCreateTable();
  45. Guid guid = Guid.NewGuid();
  46. UserInfo2 user;
  47. {
  48. user = dbSet.Add(new UserInfo2 { guid = guid, name = "user1" });
  49. DataSource.WaitForUpdate();
  50. try
  51. {
  52. dbSet.Add(new UserInfo2 { guid = guid, name = "user1" });
  53. Assert.Fail("should not be able to add same key twice");
  54. }
  55. catch (Exception ex)
  56. { }
  57. try
  58. {
  59. user = dbSet.Add(new UserInfo2 { name = "user2" });
  60. Assert.Fail("should not be able to add entity without key");
  61. }
  62. catch (Exception ex)
  63. { }
  64. }
  65. {
  66. user = dbSet.Get(guid);
  67. Assert.AreEqual("user1", user?.name);
  68. }
  69. }
  70. class UserInfo2
  71. {
  72. [Key]
  73. public Guid guid { get; set; }
  74. public string name { get; set; }
  75. }
  76. }
  77. }