{"record":{"id":"200b4a87da5bd01f","repo":"dotnet/efcore","slug":"the-discriminator-value-for-entitytype1-is-d","errorCode":null,"errorMessage":"The discriminator value for '{entityType1}' is '{discriminatorValue}' which is the same for '{entityType2}'. Every concrete entity type mapped to the container '{container}' must have a unique discriminator value.","messagePattern":"The discriminator value for '(.+?)' is '(.+?)' which is the same for '(.+?)'\\. Every concrete entity type mapped to the container '(.+?)' must have a unique discriminator value\\.","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"src/EFCore.Cosmos/Infrastructure/Internal/CosmosModelValidator.cs","lineNumber":212,"sourceCode":"            }\n\n            if (entityType.ClrType.IsInstantiable()\n                && entityType.GetContainingPropertyName() == null)\n            {\n                if (entityType.FindDiscriminatorProperty() == null)\n                {\n                    throw new InvalidOperationException(CosmosStrings.NoDiscriminatorProperty(entityType.DisplayName(), container));\n                }\n\n                var discriminatorValue = entityType.GetDiscriminatorValue();\n                if (discriminatorValue == null)\n                {\n                    throw new InvalidOperationException(CosmosStrings.NoDiscriminatorValue(entityType.DisplayName(), container));\n                }\n\n                if (discriminatorValues.TryGetValue(discriminatorValue, out var duplicateEntityType))\n                {\n                    throw new InvalidOperationException(\n                        CosmosStrings.DuplicateDiscriminatorValue(\n                            entityType.DisplayName(),\n                            discriminatorValue,\n                            duplicateEntityType.DisplayName(),\n                            container));\n                }\n\n                discriminatorValues[discriminatorValue] = entityType;\n\n                var currentIsDiscriminatorMappingComplete = entityType.GetIsDiscriminatorMappingComplete();\n                if (isDiscriminatorMappingComplete == null)\n                {\n                    isDiscriminatorMappingComplete = currentIsDiscriminatorMappingComplete;\n                }\n                else if (currentIsDiscriminatorMappingComplete != isDiscriminatorMappingComplete)\n                {\n                    throw new InvalidOperationException(\n                        CosmosStrings.IsDiscriminatorMappingCompleteMismatch(","sourceCodeStart":194,"sourceCodeEnd":230,"githubUrl":"https://github.com/dotnet/efcore/blob/dbf9771522148d61a2467854921bd5dc6f6e6916/src/EFCore.Cosmos/Infrastructure/Internal/CosmosModelValidator.cs#L194-L230","documentation":"Every concrete entity type mapped to a shared container must have a unique discriminator value. CosmosModelValidator throws InvalidOperationException via CosmosStrings.DuplicateDiscriminatorValue when two types resolve to the same discriminator value, since Cosmos could not then tell their documents apart.","triggerScenarios":"Calling .HasValue(\"X\") on two different concrete entity types mapped to the same container; inheriting a default value that collides; reusing a literal across types.","commonSituations":"Copy-paste of discriminator values when adding a new type; both types defaulting to the same short name string; merging two hierarchies into one container.","solutions":["Give each concrete entity type a distinct discriminator value.","Audit all .HasValue calls (and defaults) per shared container to ensure uniqueness."],"exampleFix":"// before (both use \"pet\")\nmodelBuilder.Entity<Cat>().HasDiscriminator(c => c.Kind).HasValue(\"pet\");\nmodelBuilder.Entity<Dog>().HasDiscriminator(d => d.Kind).HasValue(\"pet\");\n\n// after (unique values)\nmodelBuilder.Entity<Cat>().HasDiscriminator(c => c.Kind).HasValue(\"cat\");\nmodelBuilder.Entity<Dog>().HasDiscriminator(d => d.Kind).HasValue(\"dog\");","handlingStrategy":"validation","validationCode":"// Discriminator values must be unique within a container.\nvar byContainer = modelBuilder.Model.GetEntityTypes()\n    .Where(e => e.FindPrimaryKey() != null && e.GetContainer() != null && e.ClrType.IsInstantiable())\n    .GroupBy(e => e.GetContainer());\nforeach (var g in byContainer.Where(g => g.Count() > 1))\n{\n    var dups = g.GroupBy(e => e.GetDiscriminatorValue()).Where(x => x.Count() > 1);\n    if (dups.Any())\n        throw new InvalidOperationException($\"Duplicate discriminator value(s) in {g.Key}.\");\n}","typeGuard":null,"tryCatchPattern":"try { context.Database.EnsureCreated(); }\ncatch (InvalidOperationException ex) when (ex.Message.Contains(\"unique discriminator value\"))\n{ throw new InvalidOperationException(\"Give each type a distinct discriminator value.\", ex); }","preventionTips":["Use a build-time test asserting discriminator uniqueness per container.","When adding a type, pick a value not already used in that container.","Avoid defaulting discriminator values to a shared string literal."],"tags":["cosmos","discriminator","shared-container","model-validation"],"analyzedSha":"dbf9771522148d61a2467854921bd5dc6f6e6916","analyzedAt":"2026-08-06T20:46:03.226Z","schemaVersion":2},"datasetVersion":"2026-08-07T03:17:09.362Z"}