{"record":{"id":"c7a7bb2341b4ae4d","repo":"dotnet/efcore","slug":"the-entity-type-entitytype-is-sharing-the-cont","errorCode":null,"errorMessage":"The entity type '{entityType}' is sharing the container '{container}' with other types, but does not have a discriminator property configured. Configure a discriminator property and assign a unique value for this entity type.","messagePattern":"The entity type '(.+?)' is sharing the container '(.+?)' with other types, but does not have a discriminator property configured\\. Configure a discriminator property and assign a unique value for this entity type\\.","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"src/EFCore.Cosmos/Infrastructure/Internal/CosmosModelValidator.cs","lineNumber":201,"sourceCode":"                                partitionKeyStoreNames[i],\n                                entityType.GetPartitionKeyPropertyNames()[i],\n                                entityType.DisplayName(),\n                                storeNames[i]));\n                    }\n                }\n            }\n\n            if (mappedTypes.Count == 1)\n            {\n                break;\n            }\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","sourceCodeStart":183,"sourceCodeEnd":219,"githubUrl":"https://github.com/dotnet/efcore/blob/dbf9771522148d61a2467854921bd5dc6f6e6916/src/EFCore.Cosmos/Infrastructure/Internal/CosmosModelValidator.cs#L183-L219","documentation":"When two or more entity types share a Cosmos container, each must carry a discriminator property so Cosmos can distinguish document kinds. CosmosModelValidator throws InvalidOperationException via CosmosStrings.NoDiscriminatorProperty when an instantiable, container-root entity type sharing a container has no discriminator property configured.","triggerScenarios":"Mapping 2+ entity types to the same container without calling HasDiscriminator on any of them; relying on default discriminator behavior that did not apply (e.g. disabled).","commonSituations":"Consolidating previously separate containers into one shared container without adding discriminators; adding a new root type to an existing shared container; disabling the default discriminator convention.","solutions":["Configure a discriminator property on each entity type sharing the container (modelBuilder.Entity<T>().HasDiscriminator(x => x.Kind)).","Ensure each concrete type also gets a unique discriminator value.","Re-enable the discriminator convention if it was removed."],"exampleFix":"// before (two roots, one container, no discriminator)\nmodelBuilder.Entity<Cat>().ToContainer(\"pets\");\nmodelBuilder.Entity<Dog>().ToContainer(\"pets\");\n\n// after (discriminator configured)\nmodelBuilder.Entity<Cat>(b => { b.ToContainer(\"pets\"); b.HasDiscriminator(c => c.Kind).HasValue(\"cat\"); });\nmodelBuilder.Entity<Dog>(b => { b.ToContainer(\"pets\"); b.HasDiscriminator(d => d.Kind).HasValue(\"dog\"); });","handlingStrategy":"validation","validationCode":"// Every root type in a shared container needs a discriminator property.\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))\nforeach (var et in g.Where(e => e.FindDiscriminatorProperty() == null))\n    throw new InvalidOperationException($\"{et.Name} in container {g.Key} needs a discriminator property.\");","typeGuard":null,"tryCatchPattern":"try { context.Database.EnsureCreated(); }\ncatch (InvalidOperationException ex) when (ex.Message.Contains(\"discriminator property\"))\n{ throw new InvalidOperationException(\"Configure HasDiscriminator on each type in the shared container.\", ex); }","preventionTips":["Whenever you share a container across 2+ roots, configure HasDiscriminator on all of them.","Keep the default discriminator convention enabled.","Add a build-time test asserting discriminator presence for shared containers."],"tags":["cosmos","discriminator","shared-container","model-validation","tph"],"analyzedSha":"dbf9771522148d61a2467854921bd5dc6f6e6916","analyzedAt":"2026-08-06T20:46:03.226Z","schemaVersion":2},"datasetVersion":"2026-08-07T03:17:09.362Z"}