DBTestProvider.cs 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. using System;
  2. using System.Configuration;
  3. using System.IO;
  4. using System.Text;
  5. #if NETCOREAPP
  6. using System.Linq;
  7. #endif
  8. namespace PetaPoco.Tests.Integration.Databases
  9. {
  10. public abstract class DBTestProvider : IDisposable
  11. {
  12. protected abstract string ConnectionName { get; }
  13. public string ProviderName => GetProviderName(ConnectionName);
  14. protected IDatabase Database => LoadFromConnectionName(ConnectionName);
  15. protected abstract string ScriptResourceName { get; }
  16. public virtual void Dispose()
  17. {
  18. }
  19. public virtual IDatabase Execute()
  20. {
  21. var db = Database;
  22. using (var s = GetType().Assembly.GetManifestResourceStream(ScriptResourceName))
  23. {
  24. using (var r = new StreamReader(s, Encoding.UTF8))
  25. {
  26. ExecuteBuildScript(db, r.ReadToEnd());
  27. }
  28. }
  29. return db;
  30. }
  31. public virtual void ExecuteBuildScript(IDatabase database, string script)
  32. {
  33. database.Execute(script);
  34. }
  35. protected virtual IDatabaseBuildConfiguration BuildFromConnectionName(string name)
  36. {
  37. #if NETCOREAPP
  38. return DatabaseConfiguration.Build()
  39. .UsingConnectionString(AppSetting.Instance.ConnectionStringFor(name).ConnectionString)
  40. .UsingProviderName(AppSetting.Instance.ConnectionStringFor(name).ProviderName);
  41. #else
  42. return DatabaseConfiguration.Build().UsingConnectionStringName(name);
  43. #endif
  44. }
  45. protected virtual IDatabase LoadFromConnectionName(string name)
  46. {
  47. return BuildFromConnectionName(name).Create();
  48. }
  49. public string GetProviderName(string name)
  50. {
  51. #if NETCOREAPP
  52. return AppSetting.Instance.ConnectionStringFor(name).ProviderName;
  53. #else
  54. return ConfigurationManager.ConnectionStrings[name].ProviderName;
  55. #endif
  56. }
  57. }
  58. }