diff --git a/src/EFCore.Design/Migrations/Design/CSharpSnapshotGenerator.cs b/src/EFCore.Design/Migrations/Design/CSharpSnapshotGenerator.cs index 21adcfd3f1e..2ed2af86b95 100644 --- a/src/EFCore.Design/Migrations/Design/CSharpSnapshotGenerator.cs +++ b/src/EFCore.Design/Migrations/Design/CSharpSnapshotGenerator.cs @@ -841,13 +841,14 @@ protected virtual void GenerateKeyAnnotations([NotNull] IKey key, [NotNull] Inde || entityType.BaseType == null) { var tableName = (string)tableNameAnnotation?.Value ?? entityType.GetTableName(); - if (tableName != null) + if (tableName != null + || tableNameAnnotation != null) { stringBuilder .AppendLine() .Append(builderName) .Append(".ToTable(") - .Append(Code.Literal(tableName)); + .Append(Code.UnknownLiteral(tableName)); if (tableNameAnnotation != null) { annotations.Remove(tableNameAnnotation.Name); diff --git a/src/EFCore.Design/Migrations/Design/MigrationsCodeGenerator.cs b/src/EFCore.Design/Migrations/Design/MigrationsCodeGenerator.cs index 5d9cb2bb4b4..204eb2558de 100644 --- a/src/EFCore.Design/Migrations/Design/MigrationsCodeGenerator.cs +++ b/src/EFCore.Design/Migrations/Design/MigrationsCodeGenerator.cs @@ -216,6 +216,7 @@ private static IEnumerable GetAnnotatables(IModel model) private IEnumerable GetAnnotationNamespaces(IEnumerable items) => items.SelectMany( i => Dependencies.AnnotationCodeGenerator.FilterIgnoredAnnotations(i.GetAnnotations()) + .Where(a => a.Value != null) .Select(a => new { Annotatable = i, Annotation = a }) .SelectMany(a => GetProviderType(a.Annotatable, a.Annotation.Value.GetType()).GetNamespaces())); diff --git a/src/EFCore.Relational/Design/AnnotationCodeGenerator.cs b/src/EFCore.Relational/Design/AnnotationCodeGenerator.cs index e5b5a5fbbbd..099b7446f79 100644 --- a/src/EFCore.Relational/Design/AnnotationCodeGenerator.cs +++ b/src/EFCore.Relational/Design/AnnotationCodeGenerator.cs @@ -69,7 +69,7 @@ public AnnotationCodeGenerator([NotNull] AnnotationCodeGeneratorDependencies dep public virtual IEnumerable FilterIgnoredAnnotations(IEnumerable annotations) => annotations.Where( a => !( - a.Value is null + (a.Value is null && a.Name != RelationalAnnotationNames.TableName) || CoreAnnotationNames.AllNames.Contains(a.Name) || _ignoredRelationalAnnotations.Contains(a.Name))); diff --git a/src/EFCore.Relational/Extensions/RelationalEntityTypeExtensions.cs b/src/EFCore.Relational/Extensions/RelationalEntityTypeExtensions.cs index 54dea7abb43..c3819370c96 100644 --- a/src/EFCore.Relational/Extensions/RelationalEntityTypeExtensions.cs +++ b/src/EFCore.Relational/Extensions/RelationalEntityTypeExtensions.cs @@ -544,7 +544,7 @@ public static void SetFunctionName([NotNull] this IMutableEntityType entityType, [CanBeNull] string name, bool fromDataAnnotation = false) => (string)entityType.SetAnnotation( - RelationalAnnotationNames.ViewName, + RelationalAnnotationNames.FunctionName, Check.NullButNotEmpty(name, nameof(name)), fromDataAnnotation)?.Value; diff --git a/test/EFCore.Design.Tests/Migrations/ModelSnapshotSqlServerTest.cs b/test/EFCore.Design.Tests/Migrations/ModelSnapshotSqlServerTest.cs index 0506dc22632..3a7a80baa31 100644 --- a/test/EFCore.Design.Tests/Migrations/ModelSnapshotSqlServerTest.cs +++ b/test/EFCore.Design.Tests/Migrations/ModelSnapshotSqlServerTest.cs @@ -526,9 +526,7 @@ private static IQueryable GetCountByYear(int id) => throw new NotImplementedException(); [ConditionalFact] - public void TVF_types_are_stored_in_the_model_snapshot() - { - Test( + public void TVF_types_are_stored_in_the_model_snapshot() => Test( builder => { builder.HasDbFunction( @@ -545,9 +543,15 @@ public void TVF_types_are_stored_in_the_model_snapshot() { b.Property(""Something"") .HasColumnType(""nvarchar(max)""); + + b.ToTable(null); });"), - o => Assert.Null(o.GetEntityTypes().Single().GetFunctionName())); - } + o => + { + var entityType = o.GetEntityTypes().Single(); + Assert.Null(entityType.GetFunctionName()); + Assert.Null(entityType.GetTableName()); + }); [ConditionalFact] public void Entity_types_mapped_to_functions_are_stored_in_the_model_snapshot()