diff --git a/src/EFCore.SqlServer/Scaffolding/Internal/SqlServerDatabaseModelFactory.cs b/src/EFCore.SqlServer/Scaffolding/Internal/SqlServerDatabaseModelFactory.cs index f4f0a9a1f28..57b4c066397 100644 --- a/src/EFCore.SqlServer/Scaffolding/Internal/SqlServerDatabaseModelFactory.cs +++ b/src/EFCore.SqlServer/Scaffolding/Internal/SqlServerDatabaseModelFactory.cs @@ -42,6 +42,13 @@ private static readonly ISet MaxLengthRequiredTypes "nvarchar" }; + private enum EngineEdition + { + SqlDataWarehouse = 6, + SqlOnDemand = 11, + DynamicsTdsEndpoint = 1000, + } + private const string NamePartRegex = @"(?:(?:\[(?(?:(?:\]\])|[^\]])+)\])|(?[^\.\[\]]+))"; @@ -67,7 +74,7 @@ private static readonly Regex PartExtractor }; private byte? _compatibilityLevel; - private int? _engineEdition; + private EngineEdition? _engineEdition; /// /// This is an internal API that supports the Entity Framework Core infrastructure and not subject to @@ -172,11 +179,12 @@ public override DatabaseModel Create(DbConnection connection, DatabaseModelFacto } } - static int GetEngineEdition(DbConnection connection) + static EngineEdition GetEngineEdition(DbConnection connection) { using var command = connection.CreateCommand(); command.CommandText = "SELECT SERVERPROPERTY('EngineEdition');"; - return (int)command.ExecuteScalar()!; + var result = command.ExecuteScalar(); + return result != null ? (EngineEdition)Convert.ToInt32(result) : 0; } static byte GetCompatibilityLevel(DbConnection connection) @@ -1362,22 +1370,25 @@ FROM [sys].[triggers] AS [tr] } private bool SupportsTemporalTable() - => _compatibilityLevel >= 130 && (_engineEdition is not 6 and not 11 and not 1000); + => _compatibilityLevel >= 130 && IsFullFeaturedEngineEdition(); private bool SupportsMemoryOptimizedTable() - => _compatibilityLevel >= 120 && (_engineEdition is not 6 and not 11 and not 1000); + => _compatibilityLevel >= 120 && IsFullFeaturedEngineEdition(); private bool SupportsSequences() - => _compatibilityLevel >= 110 && (_engineEdition is not 6 and not 11 and not 1000); + => _compatibilityLevel >= 110 && IsFullFeaturedEngineEdition(); private bool SupportsIndexes() - => _engineEdition != 1000; + => _engineEdition != EngineEdition.DynamicsTdsEndpoint; private bool SupportsViews() - => _engineEdition != 1000; + => _engineEdition != EngineEdition.DynamicsTdsEndpoint; private bool SupportsTriggers() - => _engineEdition is not 6 and not 11 and not 1000; + => IsFullFeaturedEngineEdition(); + + private bool IsFullFeaturedEngineEdition() + => _engineEdition is not EngineEdition.SqlDataWarehouse and not EngineEdition.SqlOnDemand and not EngineEdition.DynamicsTdsEndpoint; private static string DisplayName(string? schema, string name) => (!string.IsNullOrEmpty(schema) ? schema + "." : "") + name;