コード例 #1
0
        public static ModelBuilder ApplyEntityConfiguration(this ModelBuilder builder, Action <EntityConfigurationOptions> configureOptions)
        {
            Ensure.NotNull(builder, nameof(builder));

            var options = new EntityConfigurationOptions();

            configureOptions?.Invoke(options);

            foreach (var entityType in builder.GetEntityTypes(typeof(Entity <,>)))
            {
                builder.Entity(entityType.ClrType, entityTypeBuilder =>
                {
                    entityTypeBuilder.HasKey(nameof(Entity.Id));
                });
            }

            if (options.Configure != null)
            {
                foreach (var entityType in builder.GetEntityTypes(typeof(Entity <>)))
                {
                    builder.Entity(entityType.ClrType, entityTypeBuilder =>
                    {
                        options.Configure.Invoke(entityType, entityTypeBuilder);
                    });
                }
            }

            return(builder);
        }
コード例 #2
0
        public static DbModelBuilder ApplyEntityConfiguration(this DbModelBuilder builder, Action <EntityConfigurationOptions> configureOptions)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            var options = new EntityConfigurationOptions();

            configureOptions?.Invoke(options);

            var test = builder.Types();

            builder.Types().Where(x => typeof(Entity <,>).IsAssignableFromGenericType(x)).Configure(x =>
            {
                x.HasKey(nameof(Entity.Id));
            });

            if (options.Configure != null)
            {
                builder.Types().Where(x => typeof(Entity <>).IsAssignableFromGenericType(x)).Configure(x =>
                {
                    options.Configure.Invoke(x);
                });
            }

            return(builder);
        }
コード例 #3
0
        /// <summary>
        /// Registers and configures the <see cref="EntityConfigurationProvider{T}"/> using some default values.
        /// </summary>
        /// <param name="webHostBuilder">A builder for <see cref="IWebHost"/>.</param>
        /// <param name="configureAction">The <see cref="EntityConfigurationOptions"/> to use.</param>
        /// <returns>The <see cref="IHostBuilder"/>.</returns>
        public static IWebHostBuilder UseDatabaseConfiguration <TContext>(this IWebHostBuilder webHostBuilder, Action <EntityConfigurationOptions, IConfiguration> configureAction) where TContext : DbContext, IAppSettingsDbContext
        {
            return(webHostBuilder.ConfigureAppConfiguration((hostBuilderContext, configurationBuilder) => {
                var options = new EntityConfigurationOptions();
                configureAction?.Invoke(options, configurationBuilder.Build());
                var result = options.Validate();
                if (!result.Succedded)
                {
                    throw new ArgumentException(result.Error);
                }

                configurationBuilder.Add(new EntityConfigurationSource <TContext>(options));
            })
                   .ConfigureServices((context, services) => {
                services.AddTransient <IAppSettingsDbContext, TContext>();
            }));
        }