Rename DataAccessType to DataAccessProviderType.

pull/46/head
Lau 6 years ago
parent 2a6a3b67ba
commit 3f19b269b4

@ -12,6 +12,6 @@ namespace EntityFrameworkCore.Jet.Infrastructure.Internal
public interface IJetOptions : ISingletonOptions public interface IJetOptions : ISingletonOptions
{ {
string ConnectionString { get; } string ConnectionString { get; }
DataAccessType DataAccessType { get; } DataAccessProviderType DataAccessProviderType { get; }
} }
} }

@ -26,7 +26,7 @@ namespace EntityFrameworkCore.Jet.Internal
// RowNumberPagingEnabled = jetOptions.RowNumberPaging ?? false; // RowNumberPagingEnabled = jetOptions.RowNumberPaging ?? false;
DataAccessType = GetDataAccessTypeFromOptions(jetOptions); DataAccessProviderType = GetDataAccessProviderTypeFromOptions(jetOptions);
ConnectionString = jetOptions.Connection?.ConnectionString ?? jetOptions.ConnectionString; ConnectionString = jetOptions.Connection?.ConnectionString ?? jetOptions.ConnectionString;
} }
@ -48,7 +48,7 @@ namespace EntityFrameworkCore.Jet.Internal
} }
*/ */
if (DataAccessType != GetDataAccessTypeFromOptions(jetOptions)) if (DataAccessProviderType != GetDataAccessProviderTypeFromOptions(jetOptions))
{ {
throw new InvalidOperationException( throw new InvalidOperationException(
CoreStrings.SingletonOptionChanged( CoreStrings.SingletonOptionChanged(
@ -57,9 +57,7 @@ namespace EntityFrameworkCore.Jet.Internal
} }
} }
private static DataAccessType GetDataAccessTypeFromOptions(JetOptionsExtension jetOptions) private static DataAccessProviderType GetDataAccessProviderTypeFromOptions(JetOptionsExtension jetOptions)
=> jetOptions.DataAccessProviderFactory
private static DataAccessProviderType GetDataAccessTypeFromOptions(JetOptionsExtension jetOptions)
{ {
if (jetOptions.DataAccessProviderFactory == null) if (jetOptions.DataAccessProviderFactory == null)
{ {
@ -108,7 +106,7 @@ namespace EntityFrameworkCore.Jet.Internal
/// any release. You should only use it directly in your code with extreme caution and knowing that /// any release. You should only use it directly in your code with extreme caution and knowing that
/// doing so can result in application failures when updating to a new Entity Framework Core release. /// doing so can result in application failures when updating to a new Entity Framework Core release.
/// </summary> /// </summary>
public virtual DataAccessType DataAccessType { get; private set; } public virtual DataAccessProviderType DataAccessProviderType { get; private set; }
/// <summary> /// <summary>
/// This is an internal API that supports the Entity Framework Core infrastructure and not subject to /// This is an internal API that supports the Entity Framework Core infrastructure and not subject to

@ -57,7 +57,7 @@ namespace Microsoft.EntityFrameworkCore.Metadata.Conventions
.AddEntityFrameworkJet() .AddEntityFrameworkJet()
.AddDbContext<DbContext>((p, o) => o .AddDbContext<DbContext>((p, o) => o
.UseJetWithoutPredefinedDataAccessProviderFactory<DbContext>( .UseJetWithoutPredefinedDataAccessProviderFactory<DbContext>(
JetConnection.GetConnectionString("Jet.accdb", DataAccessType.Odbc)) JetConnection.GetConnectionString("Jet.accdb", DataAccessProviderType.Odbc))
.UseInternalServiceProvider(p)) .UseInternalServiceProvider(p))
.BuildServiceProvider(); .BuildServiceProvider();

@ -92,13 +92,13 @@ namespace EntityFrameworkCore.Jet.Storage.Internal
} }
public override string GenerateParameterNamePlaceholder(string name) public override string GenerateParameterNamePlaceholder(string name)
=> _jetOptions.DataAccessType == DataAccessType.OleDb => _jetOptions.DataAccessProviderType == DataAccessProviderType.OleDb
? base.GenerateParameterNamePlaceholder(name) ? base.GenerateParameterNamePlaceholder(name)
: "?"; : "?";
public override void GenerateParameterNamePlaceholder(StringBuilder builder, string name) public override void GenerateParameterNamePlaceholder(StringBuilder builder, string name)
{ {
if (_jetOptions.DataAccessType == DataAccessType.OleDb) if (_jetOptions.DataAccessProviderType == DataAccessProviderType.OleDb)
{ {
base.GenerateParameterNamePlaceholder(builder, name); base.GenerateParameterNamePlaceholder(builder, name);
} }

@ -2,7 +2,6 @@
using System; using System;
using System.Data.Jet; using System.Data.Jet;
using System.Data.OleDb;
using JetBrains.Annotations; using JetBrains.Annotations;
namespace EntityFrameworkCore.Jet.Storage.Internal namespace EntityFrameworkCore.Jet.Storage.Internal
@ -14,14 +13,14 @@ namespace EntityFrameworkCore.Jet.Storage.Internal
{ {
public static bool ShouldRetryOn([NotNull] Exception ex) public static bool ShouldRetryOn([NotNull] Exception ex)
{ {
DataAccessType dataAccessType; DataAccessProviderType dataAccessProviderType;
var exceptionFullName = ex.GetType().FullName; var exceptionFullName = ex.GetType().FullName;
if (exceptionFullName == "System.Data.OleDb.OleDbException") if (exceptionFullName == "System.Data.OleDb.OleDbException")
dataAccessType = DataAccessType.OleDb; dataAccessProviderType = DataAccessProviderType.OleDb;
else if (exceptionFullName == "System.Data.Odbc.OdbcException") else if (exceptionFullName == "System.Data.Odbc.OdbcException")
dataAccessType = DataAccessType.Odbc; dataAccessProviderType = DataAccessProviderType.Odbc;
else else
return false; return false;
@ -36,7 +35,7 @@ namespace EntityFrameworkCore.Jet.Storage.Internal
// If too many commands get executed in short succession, ACE/Jet can run out of table handles. // If too many commands get executed in short succession, ACE/Jet can run out of table handles.
// This can happen despite proper disposal of OdbcCommand and OdbcDataReader objects. // This can happen despite proper disposal of OdbcCommand and OdbcDataReader objects.
// Waiting for a couple of milliseconds will give ACE/Jet enough time to catch up. // Waiting for a couple of milliseconds will give ACE/Jet enough time to catch up.
case -1311 when dataAccessType == DataAccessType.Odbc: case -1311 when dataAccessProviderType == DataAccessProviderType.Odbc:
return true; return true;
} }

@ -68,7 +68,9 @@ namespace System.Data.Jet
try try
{ {
connectionString = JetConnection.GetConnectionString(fileName, DataAccessType.OleDb); // ADOX is an ADO eXtension and ADO is build on top of OLE DB. We always need to use an OLE DB
// connection string for ADOX.
connectionString = JetConnection.GetConnectionString(fileName, DataAccessProviderType.OleDb);
catalog.Create(connectionString) catalog.Create(connectionString)
.Dispose(); // Dispose the returned Connection object, because we don't use it here. .Dispose(); // Dispose the returned Connection object, because we don't use it here.

@ -1,6 +1,6 @@
namespace System.Data.Jet namespace System.Data.Jet
{ {
public enum DataAccessType public enum DataAccessProviderType
{ {
Odbc, Odbc,
OleDb, OleDb,

@ -426,21 +426,21 @@ namespace System.Data.Jet
=> AdoxWrapper.CreateEmptyDatabase(fileName, dataAccessProviderFactory); => AdoxWrapper.CreateEmptyDatabase(fileName, dataAccessProviderFactory);
public static string GetConnectionString(string fileName, DbProviderFactory dataAccessProviderFactory) public static string GetConnectionString(string fileName, DbProviderFactory dataAccessProviderFactory)
=> GetConnectionString(fileName, GetDataAccessType(dataAccessProviderFactory)); => GetConnectionString(fileName, GetDataAccessProviderType(dataAccessProviderFactory));
public static string GetConnectionString(string fileName, DataAccessType dataAccessType) public static string GetConnectionString(string fileName, DataAccessProviderType dataAccessProviderType)
=> GetConnectionString( => GetConnectionString(
dataAccessType == DataAccessType.OleDb dataAccessProviderType == DataAccessProviderType.OleDb
? JetConfiguration.OleDbDefaultProvider ? JetConfiguration.OleDbDefaultProvider
: JetConfiguration.OdbcDefaultProvider, : JetConfiguration.OdbcDefaultProvider,
fileName, fileName,
dataAccessType); dataAccessProviderType);
public static string GetConnectionString(string provider, string fileName, DbProviderFactory dataAccessProviderFactory) public static string GetConnectionString(string provider, string fileName, DbProviderFactory dataAccessProviderFactory)
=> GetConnectionString(provider, fileName, GetDataAccessType(dataAccessProviderFactory)); => GetConnectionString(provider, fileName, GetDataAccessProviderType(dataAccessProviderFactory));
public static string GetConnectionString(string provider, string fileName, DataAccessType dataAccessType) public static string GetConnectionString(string provider, string fileName, DataAccessProviderType dataAccessProviderType)
=> dataAccessType == DataAccessType.OleDb => dataAccessProviderType == DataAccessProviderType.OleDb
? $"Provider={provider};Data Source={fileName}" ? $"Provider={provider};Data Source={fileName}"
: $"Driver={{{provider}}};DBQ={fileName}"; : $"Driver={{{provider}}};DBQ={fileName}";
@ -486,7 +486,7 @@ namespace System.Data.Jet
return File.Exists(fileName); return File.Exists(fileName);
} }
public static DataAccessType GetDataAccessType(string connectionString) public static DataAccessProviderType GetDataAccessProviderType(string connectionString)
{ {
var isOleDb = Regex.IsMatch(connectionString, @"Provider\s*=\s*\w+", RegexOptions.IgnoreCase); var isOleDb = Regex.IsMatch(connectionString, @"Provider\s*=\s*\w+", RegexOptions.IgnoreCase);
var isOdbc = Regex.IsMatch(connectionString, @"Driver\s*=\s*\{?\w+\}?", RegexOptions.IgnoreCase); var isOdbc = Regex.IsMatch(connectionString, @"Driver\s*=\s*\{?\w+\}?", RegexOptions.IgnoreCase);
@ -498,11 +498,11 @@ namespace System.Data.Jet
throw new ArgumentException("The connection string appears to be neither ODBC nor OLE DB compliant.", nameof(connectionString)); throw new ArgumentException("The connection string appears to be neither ODBC nor OLE DB compliant.", nameof(connectionString));
return isOleDb return isOleDb
? DataAccessType.OleDb ? DataAccessProviderType.OleDb
: DataAccessType.Odbc; : DataAccessProviderType.Odbc;
} }
public static DataAccessType GetDataAccessType(DbProviderFactory providerFactory) public static DataAccessProviderType GetDataAccessProviderType(DbProviderFactory providerFactory)
{ {
var isOleDb = providerFactory var isOleDb = providerFactory
.GetType() .GetType()
@ -529,8 +529,8 @@ namespace System.Data.Jet
throw new ArgumentException($"The parameter is neither of type OdbcFactory nor OleDbFactory.", nameof(providerFactory)); throw new ArgumentException($"The parameter is neither of type OdbcFactory nor OleDbFactory.", nameof(providerFactory));
return isOleDb return isOleDb
? DataAccessType.OleDb ? DataAccessProviderType.OleDb
: DataAccessType.Odbc; : DataAccessProviderType.Odbc;
} }
} }
} }

@ -63,6 +63,7 @@
<None Include="..\xunit.runner.json"> <None Include="..\xunit.runner.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None> </None>
<None Remove="TestResults\**" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
@ -82,4 +83,12 @@
</Content> </Content>
</ItemGroup> </ItemGroup>
<ItemGroup>
<EmbeddedResource Remove="TestResults\**" />
</ItemGroup>
<ItemGroup>
<Compile Remove="TestResults\**" />
</ItemGroup>
</Project> </Project>

@ -517,8 +517,8 @@ namespace EntityFrameworkCore.Jet.FunctionalTests
[ConditionalFact] [ConditionalFact]
public void Throws_when_no_initial_catalog() public void Throws_when_no_initial_catalog()
{ {
var dataAccessType = JetConnection.GetDataAccessProviderType(TestEnvironment.DefaultConnection); var dataAccessProviderType = JetConnection.GetDataAccessProviderType(TestEnvironment.DefaultConnection);
var dataAccessProviderFactory = JetFactory.Instance.GetDataAccessProviderFactory(dataAccessType); var dataAccessProviderFactory = JetFactory.Instance.GetDataAccessProviderFactory(dataAccessProviderType);
var connectionStringBuilder = dataAccessProviderFactory.CreateConnectionStringBuilder(); var connectionStringBuilder = dataAccessProviderFactory.CreateConnectionStringBuilder();
connectionStringBuilder.ConnectionString = TestEnvironment.DefaultConnection; connectionStringBuilder.ConnectionString = TestEnvironment.DefaultConnection;
connectionStringBuilder.Remove("Initial Catalog"); connectionStringBuilder.Remove("Initial Catalog");

@ -105,14 +105,14 @@ namespace EntityFrameworkCore.Jet.FunctionalTests.Query
.AddEntityFrameworkJet() .AddEntityFrameworkJet()
.BuildServiceProvider(validateScopes: true); .BuildServiceProvider(validateScopes: true);
var dataAccessType = JetConnection.GetDataAccessType(TestEnvironment.DefaultConnection); var dataAccessProviderType = JetConnection.GetDataAccessProviderType(TestEnvironment.DefaultConnection);
var dataAccessProviderFactory = JetFactory.Instance.CreateDataAccessProviderFactory(dataAccessType); var dataAccessProviderFactory = JetFactory.Instance.GetDataAccessProviderFactory(dataAccessProviderType);
var connectionStringBuilder = dataAccessProviderFactory.CreateConnectionStringBuilder(); var connectionStringBuilder = dataAccessProviderFactory.CreateConnectionStringBuilder();
connectionStringBuilder.ConnectionString = TestEnvironment.DefaultConnection; connectionStringBuilder.ConnectionString = TestEnvironment.DefaultConnection;
connectionStringBuilder.SetDataSource("StateManagerBug.accdb"); connectionStringBuilder.SetDataSource("StateManagerBug.accdb");
_options = new DbContextOptionsBuilder() _options = new DbContextOptionsBuilder()
.UseJet(connectionStringBuilder.ConnectionString, JetConfiguration.DefaultProviderFactory, b => b.ApplyConfiguration()) .UseJet(connectionStringBuilder.ConnectionString, TestEnvironment.DataAccessProviderFactory, b => b.ApplyConfiguration())
.UseInternalServiceProvider(serviceProvider) .UseInternalServiceProvider(serviceProvider)
.Options; .Options;
} }

@ -0,0 +1,22 @@
using System.Data.Jet;
namespace EntityFrameworkCore.Jet.FunctionalTests.TestUtilities
{
public static class AssertSqlHelper
{
static AssertSqlHelper()
{
DataAccessProviderType = TestEnvironment.DataAccessProviderType;
}
public static DataAccessProviderType DataAccessProviderType { get; set; }
public static string Parameter(string name)
=> Parameter(name, DataAccessProviderType);
public static string Parameter(string name, DataAccessProviderType dataAccessProviderType)
=> dataAccessProviderType == DataAccessProviderType.Odbc
? "?"
: name;
}
}

@ -25,8 +25,8 @@ namespace EntityFrameworkCore.Jet.FunctionalTests.TestUtilities
{ {
get get
{ {
var dataAccessType = JetConnection.GetDataAccessType(DefaultConnection); var dataAccessProviderType = JetConnection.GetDataAccessProviderType(DefaultConnection);
var dataAccessProviderFactory = JetFactory.Instance.GetDataAccessProviderFactory(dataAccessType); var dataAccessProviderFactory = JetFactory.Instance.GetDataAccessProviderFactory(dataAccessProviderType);
var connectionStringBuilder = dataAccessProviderFactory.CreateConnectionStringBuilder(); var connectionStringBuilder = dataAccessProviderFactory.CreateConnectionStringBuilder();
connectionStringBuilder.ConnectionString = DefaultConnection; connectionStringBuilder.ConnectionString = DefaultConnection;
@ -34,8 +34,8 @@ namespace EntityFrameworkCore.Jet.FunctionalTests.TestUtilities
} }
} }
public static DataAccessProvider DataAccessProvider { get; } = JetConnection.GetDataAccessType(DefaultConnection); public static DataAccessProviderType DataAccessProviderType { get; } = JetConnection.GetDataAccessProviderType(DefaultConnection);
public static DbProviderFactory DataAccessProviderFactory { get; } = JetFactory.Instance.GetDataAccessProviderFactory(JetConnection.GetDataAccessType(DefaultConnection)); public static DbProviderFactory DataAccessProviderFactory { get; } = JetFactory.Instance.GetDataAccessProviderFactory(JetConnection.GetDataAccessProviderType(DefaultConnection));
public static bool IsLocalDb { get; } = true; public static bool IsLocalDb { get; } = true;

@ -256,8 +256,8 @@ namespace System.Data.Jet.Test
{ {
var connectionString = JetConnection.GetConnectionString(StoreName, Helpers.DataAccessProviderFactory); var connectionString = JetConnection.GetConnectionString(StoreName, Helpers.DataAccessProviderFactory);
var dataAccessType = JetConnection.GetDataAccessProviderType(connectionString); var dataAccessProviderType = JetConnection.GetDataAccessProviderType(connectionString);
var dataAccessProviderFactory = JetFactory.Instance.GetDataAccessProviderFactory(dataAccessType); var dataAccessProviderFactory = JetFactory.Instance.GetDataAccessProviderFactory(dataAccessProviderType);
var connectionStringBuilder = dataAccessProviderFactory.CreateConnectionStringBuilder(); var connectionStringBuilder = dataAccessProviderFactory.CreateConnectionStringBuilder();
connectionStringBuilder.ConnectionString = connectionString; connectionStringBuilder.ConnectionString = connectionString;
@ -271,8 +271,8 @@ namespace System.Data.Jet.Test
{ {
var connectionString = JetConnection.GetConnectionString(StoreName, Helpers.DataAccessProviderFactory); var connectionString = JetConnection.GetConnectionString(StoreName, Helpers.DataAccessProviderFactory);
var dataAccessType = JetConnection.GetDataAccessProviderType(connectionString); var dataAccessProviderType = JetConnection.GetDataAccessProviderType(connectionString);
var dataAccessProviderFactory = JetFactory.Instance.GetDataAccessProviderFactory(dataAccessType); var dataAccessProviderFactory = JetFactory.Instance.GetDataAccessProviderFactory(dataAccessProviderType);
var connectionStringBuilder = dataAccessProviderFactory.CreateConnectionStringBuilder(); var connectionStringBuilder = dataAccessProviderFactory.CreateConnectionStringBuilder();
connectionStringBuilder.ConnectionString = connectionString; connectionStringBuilder.ConnectionString = connectionString;

Loading…
Cancel
Save