MssqlCeDBTestProvider.cs 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. using System;
  2. using System.Configuration;
  3. using System.Data.SqlServerCe;
  4. using System.IO;
  5. using System.Linq;
  6. namespace PetaPoco.Tests.Integration.Databases.MSSQLCe
  7. {
  8. public class MssqlCeDBTestProvider : DBTestProvider
  9. {
  10. protected override string ConnectionName => "mssqlce";
  11. protected override string ScriptResourceName => "PetaPoco.Tests.Integration.Scripts.MSSQLCeBuildDatabase.sql";
  12. public MssqlCeDBTestProvider()
  13. {
  14. // Hack: Nuget package is old and dones't support newer content
  15. // ReSharper disable AssignNullToNotNullAttribute
  16. var codeBase = typeof(SqlCeConnection).Assembly.CodeBase;
  17. var uri = new UriBuilder(codeBase);
  18. var dllPath = Path.GetDirectoryName(Uri.UnescapeDataString(uri.Path));
  19. var nativeBinaryPath = Path.GetFullPath(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile),
  20. $".nuget\\packages\\microsoft.sqlserver.compact\\4.0.8876.1\\NativeBinaries\\{(Environment.Is64BitProcess ? "amd64" : "x86")}"));
  21. Directory.GetFiles(nativeBinaryPath, "*", SearchOption.AllDirectories).ToList().ForEach(f =>
  22. {
  23. var destFilePath = Path.Combine(dllPath, Path.GetFileName(f));
  24. if (!File.Exists(destFilePath))
  25. File.Copy(f, destFilePath);
  26. });
  27. // ReSharper restore AssignNullToNotNullAttribute
  28. }
  29. public override IDatabase Execute()
  30. {
  31. if (!File.Exists(Path.Combine(Environment.CurrentDirectory, "petapoco.sdf")))
  32. using (var engine = new SqlCeEngine(ConfigurationManager.ConnectionStrings["mssqlce"].ConnectionString))
  33. {
  34. engine.CreateDatabase();
  35. }
  36. return base.Execute();
  37. }
  38. public override void ExecuteBuildScript(IDatabase database, string script)
  39. {
  40. script.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries).Select(s => s.Trim()).ToList().ForEach(s =>
  41. {
  42. if (s.StartsWith("--"))
  43. return;
  44. if (s.StartsWith("DROP"))
  45. {
  46. try
  47. {
  48. base.ExecuteBuildScript(database, s);
  49. }
  50. catch
  51. {
  52. }
  53. return;
  54. }
  55. base.ExecuteBuildScript(database, s);
  56. });
  57. }
  58. }
  59. }