Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

7 роки тому
7 роки тому
7 роки тому
7 роки тому
7 роки тому
7 роки тому
7 роки тому
7 роки тому
7 роки тому
7 роки тому
7 роки тому
7 роки тому
7 роки тому
7 роки тому
7 роки тому
7 роки тому
7 роки тому
7 роки тому
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. using System.Data;
  2. using System.Data.SqlClient;
  3. using System.Threading;
  4. using Dapper;
  5. using Microsoft.EntityFrameworkCore;
  6. namespace DotNetCore.CAP.SqlServer.Test
  7. {
  8. public abstract class DatabaseTestHost : TestHost
  9. {
  10. private static bool _sqlObjectInstalled;
  11. protected override void PostBuildServices()
  12. {
  13. base.PostBuildServices();
  14. InitializeDatabase();
  15. }
  16. public override void Dispose()
  17. {
  18. DeleteAllData();
  19. base.Dispose();
  20. }
  21. private void InitializeDatabase()
  22. {
  23. if (!_sqlObjectInstalled)
  24. {
  25. using (CreateScope())
  26. {
  27. var storage = GetService<SqlServerStorage>();
  28. var token = new CancellationTokenSource().Token;
  29. CreateDatabase();
  30. storage.InitializeAsync(token).Wait();
  31. _sqlObjectInstalled = true;
  32. }
  33. }
  34. }
  35. private void CreateDatabase()
  36. {
  37. var masterConn = ConnectionUtil.GetMasterConnectionString();
  38. var databaseName = ConnectionUtil.GetDatabaseName();
  39. using (var connection = ConnectionUtil.CreateConnection(masterConn))
  40. {
  41. connection.Execute($@"
  42. IF NOT EXISTS (SELECT * FROM sysdatabases WHERE name = N'{databaseName}')
  43. CREATE DATABASE [{databaseName}];");
  44. }
  45. }
  46. private void DeleteAllData()
  47. {
  48. using (CreateScope())
  49. {
  50. var context = GetService<TestDbContext>();
  51. var commands = new[]
  52. {
  53. "DISABLE TRIGGER ALL ON ?",
  54. "ALTER TABLE ? NOCHECK CONSTRAINT ALL",
  55. "DELETE FROM ?",
  56. "ALTER TABLE ? CHECK CONSTRAINT ALL",
  57. "ENABLE TRIGGER ALL ON ?"
  58. };
  59. foreach (var command in commands)
  60. {
  61. context.Database.GetDbConnection().Execute(
  62. "sp_MSforeachtable",
  63. new { command1 = command },
  64. commandType: CommandType.StoredProcedure);
  65. }
  66. }
  67. }
  68. }
  69. }