diff --git a/src/EFCore.Jet.Data/AdoxDatabaseCreator.cs b/src/EFCore.Jet.Data/AdoxDatabaseCreator.cs index b23d09a4..4eb570e4 100644 --- a/src/EFCore.Jet.Data/AdoxDatabaseCreator.cs +++ b/src/EFCore.Jet.Data/AdoxDatabaseCreator.cs @@ -8,7 +8,7 @@ public class AdoxDatabaseCreator { public override void CreateDatabase( string fileNameOrConnectionString, - DatabaseVersion version = DatabaseVersion.Newest, + DatabaseVersion version = DatabaseVersion.NewestSupported, CollatingOrder collatingOrder = CollatingOrder.General, string databasePassword = null) { @@ -20,10 +20,16 @@ public override void CreateDatabase( var filePath = JetStoreDatabaseHandling.ExpandFileName(JetStoreDatabaseHandling.ExtractFileNameFromConnectionString(fileNameOrConnectionString)); + if (version == DatabaseVersion.NewestSupported && + string.Equals(System.IO.Path.GetExtension(filePath), ".mdb")) + { + version = DatabaseVersion.Version40; + } + try { using dynamic catalog = new ComObject("ADOX.Catalog"); - + // ADOX is an ADO eXtension and ADO is build on top of OLE DB. var connectionString = GetConnectionString(filePath, version, collatingOrder, databasePassword); using var connection = catalog.Create(connectionString); @@ -86,7 +92,6 @@ private static string GetConnectionString(string filePath, DatabaseVersion versi DatabaseVersion.Version30 => 5, DatabaseVersion.Version40 => 5, DatabaseVersion.Version120 => 6, - DatabaseVersion.Newest => 0, _ => 0 }; diff --git a/src/EFCore.Jet.Data/DaoDatabaseCreator.cs b/src/EFCore.Jet.Data/DaoDatabaseCreator.cs index 1766b359..b3a7cb1d 100644 --- a/src/EFCore.Jet.Data/DaoDatabaseCreator.cs +++ b/src/EFCore.Jet.Data/DaoDatabaseCreator.cs @@ -9,7 +9,7 @@ public class DaoDatabaseCreator { public override void CreateDatabase( string fileNameOrConnectionString, - DatabaseVersion version = DatabaseVersion.Newest, + DatabaseVersion version = DatabaseVersion.NewestSupported, CollatingOrder collatingOrder = CollatingOrder.General, string databasePassword = null) { @@ -20,6 +20,12 @@ public override void CreateDatabase( } var filePath = JetStoreDatabaseHandling.ExpandFileName(JetStoreDatabaseHandling.ExtractFileNameFromConnectionString(fileNameOrConnectionString)); + + if (version == DatabaseVersion.NewestSupported && + string.Equals(System.IO.Path.GetExtension(filePath), ".mdb")) + { + version = DatabaseVersion.Version40; + } try { @@ -33,7 +39,6 @@ public override void CreateDatabase( DatabaseVersion.Version30 => (int) DatabaseTypeEnum.dbVersion30, DatabaseVersion.Version40 => (int) DatabaseTypeEnum.dbVersion40, DatabaseVersion.Version120 => (int) DatabaseTypeEnum.dbVersion120, - DatabaseVersion.Newest => 0, _ => 0, }; diff --git a/src/EFCore.Jet.Data/IJetDatabaseCreator.cs b/src/EFCore.Jet.Data/IJetDatabaseCreator.cs index 5cc309cb..b47cab42 100644 --- a/src/EFCore.Jet.Data/IJetDatabaseCreator.cs +++ b/src/EFCore.Jet.Data/IJetDatabaseCreator.cs @@ -31,7 +31,8 @@ public enum CollatingOrder public enum DatabaseVersion { - Newest = 0, + Newest = -1, + NewestSupported = 0, Version10 = 10, Version11 = 11, Version20 = 20, @@ -44,7 +45,7 @@ public interface IJetDatabaseCreator { void CreateDatabase( string fileNameOrConnectionString, - DatabaseVersion version = DatabaseVersion.Newest, + DatabaseVersion version = DatabaseVersion.NewestSupported, CollatingOrder collatingOrder = CollatingOrder.General, string databasePassword = null); diff --git a/src/EFCore.Jet.Data/JetConnection.cs b/src/EFCore.Jet.Data/JetConnection.cs index e83ac5f2..643aafd8 100644 --- a/src/EFCore.Jet.Data/JetConnection.cs +++ b/src/EFCore.Jet.Data/JetConnection.cs @@ -506,14 +506,14 @@ public static void ClearAllPools() => InnerConnectionFactory.Instance.ClearAllPools(); public void CreateDatabase( - DatabaseVersion version = DatabaseVersion.Newest, + DatabaseVersion version = DatabaseVersion.NewestSupported, CollatingOrder collatingOrder = CollatingOrder.General, string databasePassword = null) => CreateDatabase(DataSource, version, collatingOrder, databasePassword, SchemaProviderType); public static void CreateDatabase( string fileNameOrConnectionString, - DatabaseVersion version = DatabaseVersion.Newest, + DatabaseVersion version = DatabaseVersion.NewestSupported, CollatingOrder collatingOrder = CollatingOrder.General, string databasePassword = null, SchemaProviderType schemaProviderType = SchemaProviderType.Precise) diff --git a/src/EFCore.Jet.Data/JetDatabaseCreator.cs b/src/EFCore.Jet.Data/JetDatabaseCreator.cs index 3b417670..6d9a3194 100644 --- a/src/EFCore.Jet.Data/JetDatabaseCreator.cs +++ b/src/EFCore.Jet.Data/JetDatabaseCreator.cs @@ -13,7 +13,7 @@ public static JetDatabaseCreator CreateInstance(SchemaProviderType schemaProvide _ => throw new ArgumentOutOfRangeException(nameof(schemaProviderType)) }; - public abstract void CreateDatabase(string fileNameOrConnectionString, DatabaseVersion version = DatabaseVersion.Newest, CollatingOrder collatingOrder = CollatingOrder.General, string databasePassword = null); + public abstract void CreateDatabase(string fileNameOrConnectionString, DatabaseVersion version = DatabaseVersion.NewestSupported, CollatingOrder collatingOrder = CollatingOrder.General, string databasePassword = null); public abstract void CreateDualTable(string fileNameOrConnectionString, string databasePassword = null); } } \ No newline at end of file diff --git a/src/EFCore.Jet.Data/PreciseDatabaseCreator.cs b/src/EFCore.Jet.Data/PreciseDatabaseCreator.cs index 375736e6..dd887d0a 100644 --- a/src/EFCore.Jet.Data/PreciseDatabaseCreator.cs +++ b/src/EFCore.Jet.Data/PreciseDatabaseCreator.cs @@ -5,7 +5,7 @@ public class PreciseDatabaseCreator { public override void CreateDatabase( string fileNameOrConnectionString, - DatabaseVersion version = DatabaseVersion.Newest, + DatabaseVersion version = DatabaseVersion.NewestSupported, CollatingOrder collatingOrder = CollatingOrder.General, string databasePassword = null) => new DaoDatabaseCreator().CreateDatabase(fileNameOrConnectionString, version, collatingOrder, databasePassword); diff --git a/test/EFCore.Jet.Data.Tests/Helpers.cs b/test/EFCore.Jet.Data.Tests/Helpers.cs index fad22b06..0df3890a 100644 --- a/test/EFCore.Jet.Data.Tests/Helpers.cs +++ b/test/EFCore.Jet.Data.Tests/Helpers.cs @@ -261,7 +261,7 @@ public static JetConnection CreateAndOpenDatabase(string storeName) public static void CreateDatabase( string storeName, - DatabaseVersion version = DatabaseVersion.Newest, + DatabaseVersion version = DatabaseVersion.NewestSupported, CollatingOrder collatingOrder = CollatingOrder.General, string databasePassword = null) {