Пример #1
0
        /// <inheritdoc />
        protected override void ProcessEntityTypeAdded(
            IConventionEntityTypeBuilder entityTypeBuilder,
            BsonKnownTypesAttribute attribute,
            IConventionContext <IConventionEntityTypeBuilder> context)
        {
            MongoEntityTypeAnnotations annotations = entityTypeBuilder.MongoDb();

            if (!annotations.DiscriminatorIsRequired)
            {
                annotations.DiscriminatorIsRequired = entityTypeBuilder.Metadata.IsAbstract();
            }

            if (attribute.KnownTypes != null)
            {
                IConventionModelBuilder modelBuilder = entityTypeBuilder.ModelBuilder;
                Type baseType = entityTypeBuilder.Metadata.ClrType;

                foreach (Type derivedType in attribute.KnownTypes)
                {
                    if (!baseType.IsAssignableFrom(derivedType))
                    {
                        throw new InvalidOperationException($"Known type {derivedType} declared on base type {baseType} does not inherit from base type.");
                    }

                    modelBuilder
                    .Entity(derivedType, fromDataAnnotation: true)
                    .MongoDb()
                    .IsDerivedType = true;
                }
            }
        }
        private void ValidateDiscriminator(IEntityType entityType, ISet <Tuple <IEntityType, string> > discriminatorSet)
        {
            var annotations = new MongoEntityTypeAnnotations(entityType);

            if (string.IsNullOrWhiteSpace(annotations.Discriminator))
            {
                throw new InvalidOperationException($"Missing discriminator value for entity type {entityType.DisplayName()}.");
            }
            if (!discriminatorSet.Add(Tuple.Create(entityType.GetRootType(), annotations.Discriminator)))
            {
                throw new InvalidOperationException($"Duplicate discriminator value {annotations.Discriminator} for root entity type {entityType.GetRootType().DisplayName()} (defined on {entityType.DisplayName()}).");
            }
        }
        /// <inheritdoc />
        protected override void ProcessEntityTypeAdded(
            IConventionEntityTypeBuilder entityTypeBuilder,
            BsonDiscriminatorAttribute attribute,
            IConventionContext <IConventionEntityTypeBuilder> context)
        {
            Check.NotNull(entityTypeBuilder, nameof(entityTypeBuilder));
            Check.NotNull(attribute, nameof(attribute));
            MongoEntityTypeAnnotations annotations = entityTypeBuilder.MongoDb();

            if (!string.IsNullOrWhiteSpace(attribute.Discriminator))
            {
                annotations.Discriminator = attribute.Discriminator;
            }

            if (!annotations.DiscriminatorIsRequired)
            {
                annotations.DiscriminatorIsRequired = attribute.Required;
            }

            annotations.IsRootType = attribute.RootClass;
        }