public static ObjectExtensionManager AddOrUpdateProperty <TObject, TProperty>(
     [NotNull] this ObjectExtensionManager objectExtensionManager,
     [NotNull] string propertyName,
     [CanBeNull] Action <ObjectExtensionPropertyInfo> configureAction = null)
     where TObject : IHasExtraProperties
 {
     return(objectExtensionManager.AddOrUpdateProperty(
                typeof(TObject),
                typeof(TProperty),
                propertyName,
                configureAction
                ));
 }
    public static ObjectExtensionPropertyInfo GetPropertyOrNull(
        [NotNull] this ObjectExtensionManager objectExtensionManager,
        [NotNull] Type objectType,
        [NotNull] string propertyName)
    {
        Check.NotNull(objectExtensionManager, nameof(objectExtensionManager));
        Check.NotNull(objectType, nameof(objectType));
        Check.NotNull(propertyName, nameof(propertyName));

        return(objectExtensionManager
               .GetOrNull(objectType)?
               .GetPropertyOrNull(propertyName));
    }
Пример #3
0
 public static ObjectExtensionManager MapEfCoreProperty <TEntity, TProperty>(
     [NotNull] this ObjectExtensionManager objectExtensionManager,
     [NotNull] string propertyName,
     [CanBeNull] Action <PropertyBuilder> propertyBuildAction)
     where TEntity : IHasExtraProperties, IEntity
 {
     return(objectExtensionManager.MapEfCoreProperty(
                typeof(TEntity),
                typeof(TProperty),
                propertyName,
                propertyBuildAction
                ));
 }
        public static ObjectExtensionManager MapEfEntity(
            [NotNull] this ObjectExtensionManager objectExtensionManager,
            [NotNull] Type entityType,
            [NotNull] Action <EntityTypeBuilder> entityTypeBuildAction)
        {
            Check.NotNull(objectExtensionManager, nameof(objectExtensionManager));

            return(objectExtensionManager.AddOrUpdate(
                       entityType,
                       options =>
            {
                options.MapEfEntity(entityTypeBuildAction);
            }));
        }
        public static ObjectExtensionManager MapEfProperty(
            [NotNull] this ObjectExtensionManager objectExtensionManager,
            [NotNull] Type entityType,
            [NotNull] Type propertyType,
            [NotNull] string propertyName)
        {
            Check.NotNull(objectExtensionManager, nameof(objectExtensionManager));

            return(objectExtensionManager.AddOrUpdateProperty(
                       entityType,
                       propertyType,
                       propertyName,
                       options => { options.MapEf(); }
                       ));
        }
    public static ImmutableList <ObjectExtensionPropertyInfo> GetProperties(
        [NotNull] this ObjectExtensionManager objectExtensionManager,
        [NotNull] Type objectType)
    {
        Check.NotNull(objectExtensionManager, nameof(objectExtensionManager));
        Check.NotNull(objectType, nameof(objectType));

        var extensionInfo = objectExtensionManager.GetOrNull(objectType);

        if (extensionInfo == null)
        {
            return(EmptyPropertyList);
        }

        return(extensionInfo.GetProperties());
    }
        public static void ConfigureEfEntity(
            [NotNull] this ObjectExtensionManager objectExtensionManager,
            [NotNull] EntityTypeBuilder typeBuilder)
        {
            Check.NotNull(objectExtensionManager, nameof(objectExtensionManager));
            Check.NotNull(typeBuilder, nameof(typeBuilder));

            var objectExtension = objectExtensionManager.GetOrNull(typeBuilder.Metadata.ClrType);

            if (objectExtension == null)
            {
                return;
            }

            var efEntityMappings = objectExtension.GetEfEntityMappings();

            foreach (var efEntityMapping in efEntityMappings)
            {
                efEntityMapping.EntityTypeBuildAction?.Invoke(typeBuilder);
            }

            foreach (var property in objectExtension.GetProperties())
            {
                var efMapping = property.GetEfMappingOrNull();
                if (efMapping == null)
                {
                    continue;
                }

                /* Prevent multiple calls to the entityTypeBuilder.Property(...) method */
                if (typeBuilder.Metadata.FindProperty(property.Name) != null)
                {
                    continue;
                }

                var propertyBuilder = typeBuilder.Property(property.Type, property.Name);

                efMapping.EntityTypeAndPropertyBuildAction?.Invoke(typeBuilder, propertyBuilder);
#pragma warning disable 618
                efMapping.PropertyBuildAction?.Invoke(propertyBuilder);
#pragma warning restore 618
            }
        }
    public static ObjectExtensionManager AddOrUpdateProperty(
        [NotNull] this ObjectExtensionManager objectExtensionManager,
        [NotNull] Type objectType,
        [NotNull] Type propertyType,
        [NotNull] string propertyName,
        [CanBeNull] Action <ObjectExtensionPropertyInfo> configureAction = null)
    {
        Check.NotNull(objectExtensionManager, nameof(objectExtensionManager));

        return(objectExtensionManager.AddOrUpdate(
                   objectType,
                   options =>
        {
            options.AddOrUpdateProperty(
                propertyType,
                propertyName,
                configureAction
                );
        }));
    }
        public static ObjectExtensionManager MapEfProperty(
            [NotNull] this ObjectExtensionManager objectExtensionManager,
            [NotNull] Type entityType,
            [NotNull] Type propertyType,
            [NotNull] string propertyName,
            [CanBeNull] Action <EntityTypeBuilder, PropertyBuilder> entityTypeAndPropertyBuildAction)
        {
            Check.NotNull(objectExtensionManager, nameof(objectExtensionManager));

            return(objectExtensionManager.AddOrUpdateProperty(
                       entityType,
                       propertyType,
                       propertyName,
                       options =>
            {
                options.MapEf(
                    entityTypeAndPropertyBuildAction
                    );
            }
                       ));
        }
    public static ObjectExtensionManager AddOrUpdateProperty(
        [NotNull] this ObjectExtensionManager objectExtensionManager,
        [NotNull] Type[] objectTypes,
        [NotNull] Type propertyType,
        [NotNull] string propertyName,
        [CanBeNull] Action <ObjectExtensionPropertyInfo> configureAction = null)
    {
        Check.NotNull(objectTypes, nameof(objectTypes));

        foreach (var objectType in objectTypes)
        {
            objectExtensionManager.AddOrUpdateProperty(
                objectType,
                propertyType,
                propertyName,
                configureAction
                );
        }

        return(objectExtensionManager);
    }
        public static void ConfigureEfDbContext <TDbContext>(
            [NotNull] this ObjectExtensionManager objectExtensionManager,
            [NotNull] ModelBuilder modelBuilder)
            where TDbContext : DbContext
        {
            Check.NotNull(objectExtensionManager, nameof(objectExtensionManager));
            Check.NotNull(modelBuilder, nameof(modelBuilder));

            var objectExtension = objectExtensionManager.GetOrNull(typeof(TDbContext));

            if (objectExtension == null)
            {
                return;
            }

            var efDbContextMappings = objectExtension.GetEfDbContextMappings();

            foreach (var efDbContextMapping in efDbContextMappings)
            {
                efDbContextMapping.ModelBuildAction?.Invoke(modelBuilder);
            }
        }
 public static ImmutableList <ObjectExtensionPropertyInfo> GetProperties <TObject>(
     [NotNull] this ObjectExtensionManager objectExtensionManager)
 {
     return(objectExtensionManager.GetProperties(typeof(TObject)));
 }