diff --git a/src/EntityFramework.MicrosoftSqlServer.Design/ReverseEngineering/SqlServerMetadataModelProvider.cs b/src/EntityFramework.MicrosoftSqlServer.Design/ReverseEngineering/SqlServerMetadataModelProvider.cs index 4f16a06a36c..bc1f6ffaa2c 100644 --- a/src/EntityFramework.MicrosoftSqlServer.Design/ReverseEngineering/SqlServerMetadataModelProvider.cs +++ b/src/EntityFramework.MicrosoftSqlServer.Design/ReverseEngineering/SqlServerMetadataModelProvider.cs @@ -18,7 +18,6 @@ namespace Microsoft.Data.Entity.SqlServer.Design.ReverseEngineering { public class SqlServerMetadataModelProvider : RelationalMetadataModelProvider { - private readonly IMetadataReader _metadataReader; private readonly SqlServerLiteralUtilities _sqlServerLiteralUtilities; private const int DefaultDateTimePrecision = 7; @@ -29,24 +28,13 @@ public SqlServerMetadataModelProvider( [NotNull] IRelationalTypeMapper typeMapper, [NotNull] IMetadataReader metadataReader, [NotNull] SqlServerLiteralUtilities sqlServerLiteralUtilities) - : base(loggerFactory, typeMapper) + : base(loggerFactory, typeMapper, metadataReader) { - Check.NotNull(metadataReader, nameof(metadataReader)); Check.NotNull(sqlServerLiteralUtilities, nameof(sqlServerLiteralUtilities)); - _metadataReader = metadataReader; _sqlServerLiteralUtilities = sqlServerLiteralUtilities; } - public override IModel GetModel([NotNull] string connectionString, [CanBeNull] TableSelectionSet tableSelectionSet) - { - Check.NotEmpty(connectionString, nameof(connectionString)); - - var schemaInfo = _metadataReader.GetSchema(connectionString, tableSelectionSet ?? TableSelectionSet.InclusiveAll); - - return GetModel(schemaInfo); - } - protected override PropertyBuilder AddColumn([NotNull] EntityTypeBuilder builder, [NotNull] Column column) { var propertyBuilder = base.AddColumn(builder, column); diff --git a/src/EntityFramework.Relational.Design/ReverseEngineering/RelationalMetadataModelProvider.cs b/src/EntityFramework.Relational.Design/ReverseEngineering/RelationalMetadataModelProvider.cs index b49ad341a41..c049b92db1d 100644 --- a/src/EntityFramework.Relational.Design/ReverseEngineering/RelationalMetadataModelProvider.cs +++ b/src/EntityFramework.Relational.Design/ReverseEngineering/RelationalMetadataModelProvider.cs @@ -10,6 +10,7 @@ using Microsoft.Data.Entity.Metadata.Builders; using Microsoft.Data.Entity.Metadata.Conventions; using Microsoft.Data.Entity.Relational.Design.Model; +using Microsoft.Data.Entity.Relational.Design.ReverseEngineering.Internal; using Microsoft.Data.Entity.Storage; using Microsoft.Data.Entity.Utilities; using Microsoft.Extensions.Logging; @@ -18,7 +19,7 @@ namespace Microsoft.Data.Entity.Relational.Design.ReverseEngineering { - public abstract class RelationalMetadataModelProvider : MetadataModelProvider + public class RelationalMetadataModelProvider : MetadataModelProvider { internal static IReadOnlyList IgnoredAnnotations { get; } = new List { @@ -30,18 +31,31 @@ public abstract class RelationalMetadataModelProvider : MetadataModelProvider private readonly Table _nullTable = new Table { }; private CSharpUniqueNamer _tableNamer; private readonly IRelationalTypeMapper _typeMapper; + private readonly IMetadataReader _metadataReader; - protected RelationalMetadataModelProvider( + public RelationalMetadataModelProvider( [NotNull] ILoggerFactory loggerFactory, - [NotNull] IRelationalTypeMapper typeMapper) + [NotNull] IRelationalTypeMapper typeMapper, + [NotNull] IMetadataReader metadataReader) : base(loggerFactory) { Check.NotNull(typeMapper, nameof(typeMapper)); + Check.NotNull(metadataReader, nameof(metadataReader)); _typeMapper = typeMapper; + _metadataReader = metadataReader; } - protected virtual IModel GetModel([NotNull] SchemaInfo schemaInfo) + public override IModel GetModel([NotNull] string connectionString, [CanBeNull] TableSelectionSet tableSelectionSet) + { + Check.NotEmpty(connectionString, nameof(connectionString)); + + var schemaInfo = _metadataReader.GetSchema(connectionString, tableSelectionSet ?? TableSelectionSet.InclusiveAll); + + return GetModelFromSchema(schemaInfo); + } + + protected virtual IModel GetModelFromSchema([NotNull] SchemaInfo schemaInfo) { var modelBuilder = new ModelBuilder(new ConventionSet()); diff --git a/src/EntityFramework.Sqlite.Design/EntityFramework.Sqlite.Design.csproj b/src/EntityFramework.Sqlite.Design/EntityFramework.Sqlite.Design.csproj index 1b0a2cc0856..9bfcaef6ac1 100644 --- a/src/EntityFramework.Sqlite.Design/EntityFramework.Sqlite.Design.csproj +++ b/src/EntityFramework.Sqlite.Design/EntityFramework.Sqlite.Design.csproj @@ -54,7 +54,6 @@ - diff --git a/src/EntityFramework.Sqlite.Design/ReverseEngineering/SqliteMetadataModelProvider.cs b/src/EntityFramework.Sqlite.Design/ReverseEngineering/SqliteMetadataModelProvider.cs deleted file mode 100644 index 104b4524949..00000000000 --- a/src/EntityFramework.Sqlite.Design/ReverseEngineering/SqliteMetadataModelProvider.cs +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -using JetBrains.Annotations; -using Microsoft.Data.Entity.Metadata; -using Microsoft.Data.Entity.Relational.Design.ReverseEngineering; -using Microsoft.Data.Entity.Relational.Design.ReverseEngineering.Internal; -using Microsoft.Data.Entity.Storage; -using Microsoft.Data.Entity.Utilities; -using Microsoft.Extensions.Logging; - -namespace Microsoft.Data.Entity.Sqlite.Design.ReverseEngineering -{ - public class SqliteMetadataModelProvider : RelationalMetadataModelProvider - { - private readonly IMetadataReader _metadataReader; - - public SqliteMetadataModelProvider( - [NotNull] ILoggerFactory loggerFactory, - [NotNull] IRelationalTypeMapper typeMapper, - [NotNull] IMetadataReader metadataReader) - : base(loggerFactory, typeMapper) - { - Check.NotNull(metadataReader, nameof(metadataReader)); - - _metadataReader = metadataReader; - } - - public override IModel GetModel([NotNull] string connectionString, [CanBeNull] TableSelectionSet tableSelectionSet) - { - Check.NotEmpty(connectionString, nameof(connectionString)); - - var databaseInfo = _metadataReader.GetSchema(connectionString, tableSelectionSet ?? TableSelectionSet.InclusiveAll); - - return GetModel(databaseInfo); - } - } -} diff --git a/src/EntityFramework.Sqlite.Design/SqliteDesignTimeServices.cs b/src/EntityFramework.Sqlite.Design/SqliteDesignTimeServices.cs index 87ee058ed36..0795a7521b9 100644 --- a/src/EntityFramework.Sqlite.Design/SqliteDesignTimeServices.cs +++ b/src/EntityFramework.Sqlite.Design/SqliteDesignTimeServices.cs @@ -19,7 +19,7 @@ public class SqliteDesignTimeServices public virtual void ConfigureDesignTimeServices([NotNull] IServiceCollection serviceCollection) { serviceCollection - .AddSingleton() + .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() diff --git a/test/EntityFramework.Relational.Design.Tests/RelationalMetadataModelProviderTest.cs b/test/EntityFramework.Relational.Design.Tests/RelationalMetadataModelProviderTest.cs index f555c11796b..169c3edaa7f 100644 --- a/test/EntityFramework.Relational.Design.Tests/RelationalMetadataModelProviderTest.cs +++ b/test/EntityFramework.Relational.Design.Tests/RelationalMetadataModelProviderTest.cs @@ -558,18 +558,22 @@ public void Unique_names() public class FakeMetadataModelProvider : RelationalMetadataModelProvider { - public new IModel GetModel(SchemaInfo schemaInfo) => base.GetModel(schemaInfo); - - public override IModel GetModel([NotNull] string connectionString, [CanBeNull] TableSelectionSet tableSelectionSet) - { - throw new NotImplementedException(); - } + public IModel GetModel(SchemaInfo schemaInfo) => base.GetModelFromSchema(schemaInfo); public FakeMetadataModelProvider( [NotNull] ILoggerFactory loggerFactory) : base(loggerFactory, - new TestTypeMapper()) + new TestTypeMapper(), + new FakeMetadataReader()) + { + } + } + + public class FakeMetadataReader : IMetadataReader + { + public virtual SchemaInfo GetSchema([NotNull] string connectionString, [NotNull] TableSelectionSet tableSelectionSet) { + throw new NotImplementedException(); } } diff --git a/test/EntityFramework.Sqlite.Design.FunctionalTests/SqliteMetadataModelProviderTest.cs b/test/EntityFramework.Sqlite.Design.FunctionalTests/SqliteMetadataModelProviderTest.cs index c861467b7a1..41d5d7a5008 100644 --- a/test/EntityFramework.Sqlite.Design.FunctionalTests/SqliteMetadataModelProviderTest.cs +++ b/test/EntityFramework.Sqlite.Design.FunctionalTests/SqliteMetadataModelProviderTest.cs @@ -13,7 +13,6 @@ using Microsoft.Data.Entity.Relational.Design.ReverseEngineering.Internal; using Microsoft.Data.Entity.Relational.Design.Utilities; using Microsoft.Data.Entity.Sqlite.Design; -using Microsoft.Data.Entity.Sqlite.Design.ReverseEngineering; using Microsoft.Data.Entity.Sqlite.FunctionalTests; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; @@ -23,7 +22,7 @@ namespace EntityFramework.Sqlite.Design.FunctionalTests { public class SqliteMetadataModelProviderTest { - private readonly SqliteMetadataModelProvider _metadataModelProvider; + private readonly RelationalMetadataModelProvider _metadataModelProvider; private readonly SqliteTestStore _testStore; private readonly TestLogger _logger; @@ -44,7 +43,7 @@ public SqliteMetadataModelProviderTest() serviceProvider.GetService().AddProvider(new TestLoggerProvider(_logger)); _metadataModelProvider = serviceProvider - .GetService() as SqliteMetadataModelProvider; + .GetService() as RelationalMetadataModelProvider; } [Fact] diff --git a/test/EntityFramework.Sqlite.Design.Tests/ApiConsistencyTest.cs b/test/EntityFramework.Sqlite.Design.Tests/ApiConsistencyTest.cs index abcbf8ddd99..a1ff0ea81da 100644 --- a/test/EntityFramework.Sqlite.Design.Tests/ApiConsistencyTest.cs +++ b/test/EntityFramework.Sqlite.Design.Tests/ApiConsistencyTest.cs @@ -8,6 +8,6 @@ namespace Microsoft.Data.Entity.Sqlite.Design { public class ApiConsistencyTest : ApiConsistencyTestBase { - protected override Assembly TargetAssembly => typeof(SqliteMetadataModelProvider).Assembly; + protected override Assembly TargetAssembly => typeof(SqliteMetadataReader).Assembly; } }