diff --git a/src/EFCore.Design/Scaffolding/Internal/CSharpDbContextGenerator.cs b/src/EFCore.Design/Scaffolding/Internal/CSharpDbContextGenerator.cs index 13a1f49dbe4..c097532ac51 100644 --- a/src/EFCore.Design/Scaffolding/Internal/CSharpDbContextGenerator.cs +++ b/src/EFCore.Design/Scaffolding/Internal/CSharpDbContextGenerator.cs @@ -703,28 +703,16 @@ private void GenerateProperty(IProperty property, bool useDataAnnotations) if (((IConventionProperty)property).GetValueGeneratedConfigurationSource().HasValue && RelationalValueGenerationConvention.GetValueGenerated(property) != valueGenerated) { - string methodName; - switch (valueGenerated) + var methodName = valueGenerated switch { - case ValueGenerated.OnAdd: - methodName = nameof(PropertyBuilder.ValueGeneratedOnAdd); - break; - - case ValueGenerated.OnAddOrUpdate: - isRowVersion = property.IsConcurrencyToken; - methodName = isRowVersion - ? nameof(PropertyBuilder.IsRowVersion) - : nameof(PropertyBuilder.ValueGeneratedOnAddOrUpdate); - break; - - case ValueGenerated.Never: - methodName = nameof(PropertyBuilder.ValueGeneratedNever); - break; - - default: - methodName = ""; - break; - } + ValueGenerated.OnAdd => nameof(PropertyBuilder.ValueGeneratedOnAdd), + ValueGenerated.OnAddOrUpdate => property.IsConcurrencyToken + ? nameof(PropertyBuilder.IsRowVersion) + : nameof(PropertyBuilder.ValueGeneratedOnAddOrUpdate), + ValueGenerated.OnUpdate => nameof(PropertyBuilder.ValueGeneratedOnUpdate), + ValueGenerated.Never => nameof(PropertyBuilder.ValueGeneratedNever), + _ => throw new InvalidOperationException($"Unhandled enum value '{nameof(ValueGenerated)}.{valueGenerated}'") + }; lines.Add($".{methodName}()"); } diff --git a/test/EFCore.Design.Tests/Scaffolding/Internal/CSharpDbContextGeneratorTest.cs b/test/EFCore.Design.Tests/Scaffolding/Internal/CSharpDbContextGeneratorTest.cs index 31dc3807ef3..6ffedff1dd0 100644 --- a/test/EFCore.Design.Tests/Scaffolding/Internal/CSharpDbContextGeneratorTest.cs +++ b/test/EFCore.Design.Tests/Scaffolding/Internal/CSharpDbContextGeneratorTest.cs @@ -229,6 +229,41 @@ public void ModelSameNamespaceDbContext_works() ); } + [ConditionalFact] + public void ValueGenerated_works() + { + Test( + modelBuilder => modelBuilder.Entity( + "Entity", + x => + { + x.Property("ValueGeneratedOnAdd").ValueGeneratedOnAdd(); + x.Property("ValueGeneratedOnAddOrUpdate").ValueGeneratedOnAddOrUpdate(); + x.Property("ConcurrencyToken").IsConcurrencyToken(); + x.Property("ValueGeneratedOnUpdate").ValueGeneratedOnUpdate(); + x.Property("ValueGeneratedNever").ValueGeneratedNever(); + }), + new ModelCodeGenerationOptions(), + code => + { + Assert.Contains(@"Property(e => e.ValueGeneratedOnAdd) + .ValueGeneratedOnAdd()", code.ContextFile.Code); + Assert.Contains("Property(e => e.ValueGeneratedOnAddOrUpdate).ValueGeneratedOnAddOrUpdate()", code.ContextFile.Code); + Assert.Contains("Property(e => e.ConcurrencyToken).IsConcurrencyToken()", code.ContextFile.Code); + Assert.Contains("Property(e => e.ValueGeneratedOnUpdate).ValueGeneratedOnUpdate()", code.ContextFile.Code); + Assert.Contains("Property(e => e.ValueGeneratedNever).ValueGeneratedNever()", code.ContextFile.Code); + }, + model => + { + var entity = model.FindEntityType("TestNamespace.Entity"); + Assert.Equal(ValueGenerated.OnAdd, entity.GetProperty("ValueGeneratedOnAdd").ValueGenerated); + Assert.Equal(ValueGenerated.OnAddOrUpdate, entity.GetProperty("ValueGeneratedOnAddOrUpdate").ValueGenerated); + Assert.True(entity.GetProperty("ConcurrencyToken").IsConcurrencyToken); + Assert.Equal(ValueGenerated.OnUpdate, entity.GetProperty("ValueGeneratedOnUpdate").ValueGenerated); + Assert.Equal(ValueGenerated.Never, entity.GetProperty("ValueGeneratedNever").ValueGenerated); + }); + } + private class TestCodeGeneratorPlugin : ProviderCodeGeneratorPlugin { public override MethodCallCodeFragment GenerateProviderOptions()