/// <summary>
 /// Constructor for the HbsCSharpModelGenerator.
 /// </summary>
 /// <param name="databaseModelFactory">Service to reverse engineer a database into a database model.</param>
 /// <param name="scaffoldingModelFactory">Factory to create a scaffolding model.</param>
 /// <param name="modelCodeGeneratorSelector">Selects a model code generator service for a given programming language.</param>
 /// <param name="cSharpUtilities">C# utilities.</param>
 /// <param name="cSharpHelper">C# helper.</param>
 /// <param name="connectionStringResolver">Connection string resolver.</param>
 public HbsReverseEngineerScaffolderEnhance(
     HandlebarsScaffoldingOptions handlebarsScaffoldingOptions,
     IDatabaseModelFactory databaseModelFactory,
     IScaffoldingModelFactory scaffoldingModelFactory,
     IModelCodeGeneratorSelector modelCodeGeneratorSelector,
     ICSharpUtilities cSharpUtilities,
     ICSharpHelper cSharpHelper,
     INamedConnectionStringResolver connectionStringResolver) : base(databaseModelFactory,
                                                                     scaffoldingModelFactory,
                                                                     modelCodeGeneratorSelector,
                                                                     cSharpUtilities,
                                                                     cSharpHelper,
                                                                     connectionStringResolver)
 {
     HandlebarsScaffoldingOptions = handlebarsScaffoldingOptions ?? HandlebarsScaffoldingOptions.Default;
 }
コード例 #2
0
        public void IModel_Extensions_Should_Not_Filter_If_No_Excluded_Tables()
        {
            var builder = new ModelBuilder(new ConventionSet());

            builder.Entity <Category>()
            .ToTable("Category", "dbo");

            builder.Entity <Product>()
            .ToTable("Product", "prd");

            var options = new HandlebarsScaffoldingOptions
            {
                ExcludedTables = null
            };

            var entityTypes = builder.Model.GetScaffoldEntityTypes(options);

            Assert.Contains(entityTypes, e => e.ClrType.Name == "Category");
            Assert.Contains(entityTypes, e => e.ClrType.Name == "Product");
        }
 /// <summary>
 /// Constructor for the HbsCSharpModelGenerator.
 /// </summary>
 /// <param name="dependencies">Service dependencies parameter class for HbsCSharpModelGenerator.</param>
 /// <param name="handlebarsHelperService">Handlebars helper service.</param>
 /// <param name="dbContextTemplateService">Template service for DbContext generator.</param>
 /// <param name="entityTypeTemplateService">Template service for the entity types generator.</param>
 /// <param name="entityTypeTransformationService">Service for transforming entity definitions.</param>
 /// <param name="cSharpDbContextGenerator">DbContext generator.</param>
 /// <param name="cSharpEntityTypeGenerator">Entity type generator.</param>
 public HbsCSharpModelGeneratorEnhance(ModelCodeGeneratorDependencies dependencies,
                                       IHbsHelperService handlebarsHelperService,
                                       IDbContextTemplateService dbContextTemplateService,
                                       IEntityTypeTemplateService entityTypeTemplateService,
                                       IEntityTypeConfigurationTemplateService entityTypeConfigurationTemplateService,
                                       IEntityTypeTransformationService entityTypeTransformationService,
                                       ICSharpDbContextGenerator cSharpDbContextGenerator,
                                       ICSharpEntityTypeGenerator cSharpEntityTypeGenerator,
                                       ICSharpEntityTypeConfigurationGenerator cSharpEntityTypeConfigurationGenerator,
                                       HandlebarsScaffoldingOptions handlebarsScaffoldingOptions) : base(dependencies,
                                                                                                         handlebarsHelperService,
                                                                                                         dbContextTemplateService,
                                                                                                         entityTypeTemplateService,
                                                                                                         entityTypeTransformationService,
                                                                                                         cSharpDbContextGenerator,
                                                                                                         cSharpEntityTypeGenerator)
 {
     EntityTypeConfigurationTemplateService = entityTypeConfigurationTemplateService;
     CSharpEntityTypeConfigurationGenerator = cSharpEntityTypeConfigurationGenerator;
     HandlebarsScaffoldingOptions           = handlebarsScaffoldingOptions ?? HandlebarsScaffoldingOptions.Default;
 }
コード例 #4
0
        public void IModel_Extensions_Should_Filter_EntityTypes_From_Options_By_Table_Name_and_Schema()
        {
            var builder = new ModelBuilder(new ConventionSet());

            builder.Entity <Category>()
            .ToTable("Category", "dbo");

            builder.Entity <Product>()
            .ToTable("Product", "prd");

            var options = new HandlebarsScaffoldingOptions
            {
                ExcludedTables = new List <string> {
                    "dbo.Category", "dbo.Product"
                }
            };

            var entityTypes = builder.Model.GetScaffoldEntityTypes(options);

            Assert.DoesNotContain(entityTypes, e => e.ClrType.Name == "Category");
            Assert.Contains(entityTypes, e => e.ClrType.Name == "Product");
        }
コード例 #5
0
        /// <summary>
        /// Constructor for the Handlebars DbContext generator.
        /// </summary>
        /// <param name="handlebarsScaffoldingOptions">Handlebars Scaffolding Options.</param>
        /// <param name="legacyProviderCodeGenerators">Legacy provider code generators.</param>
        /// <param name="providerCodeGenerators">Generator for scaffolding provider.</param>
        /// <param name="annotationCodeGenerator">Annotation code generator.</param>
        /// <param name="dbContextTemplateService">Template service for DbContext generator.</param>
        /// <param name="entityTypeTransformationService">Service for transforming entity definitions.</param>
        /// <param name="cSharpHelper">CSharp helper.</param>
        public HbsCSharpDbContextGeneratorEnhance(
#pragma warning disable CS0618 // Type or member is obsolete
            IEnumerable <IScaffoldingProviderCodeGenerator> legacyProviderCodeGenerators,
#pragma warning restore CS0618 // Type or member is obsolete
            IEnumerable <IProviderConfigurationCodeGenerator> providerCodeGenerators,
            IAnnotationCodeGenerator annotationCodeGenerator,
            IDbContextTemplateService dbContextTemplateService,
            IEntityTypeTransformationService entityTypeTransformationService,
            ICSharpHelper cSharpHelper,
            HandlebarsScaffoldingOptions handlebarsScaffoldingOptions)
        {
            if (!legacyProviderCodeGenerators.Any() && !providerCodeGenerators.Any())
            {
                throw new ArgumentException(AbstractionsStrings.CollectionArgumentIsEmpty(nameof(providerCodeGenerators)));
            }

            HandlebarsScaffoldingOptions       = handlebarsScaffoldingOptions ?? HandlebarsScaffoldingOptions.Default;
            LegacyProviderCodeGenerator        = legacyProviderCodeGenerators.LastOrDefault();
            ProviderConfigurationCodeGenerator = providerCodeGenerators.LastOrDefault();
            CodeGenerator                   = annotationCodeGenerator ?? throw new ArgumentNullException(nameof(annotationCodeGenerator));
            DbContextTemplateService        = dbContextTemplateService ?? throw new ArgumentNullException(nameof(dbContextTemplateService));
            EntityTypeTransformationService = entityTypeTransformationService ?? throw new ArgumentNullException(nameof(entityTypeTransformationService));
            CSharpHelper = cSharpHelper ?? throw new ArgumentNullException(nameof(cSharpHelper));
        }
        /// <summary>
        ///     <para>
        ///         Registers the Handlebars scaffolding generator as a service in the <see cref="IServiceCollection" />.
        ///         This allows you to customize generated DbContext and entity type classes by modifying the Handlebars
        ///         templates in the CodeTemplates folder.
        ///     </para>
        ///     <para>
        ///         Has <paramref name="configureOptions" /> that allow you to choose whether to generate only the DbContext class,
        ///         only entity type classes, or both DbContext and entity type classes (the default).
        ///         It also allows you to exclude tables from the generation.
        ///         This can be useful when placing model classes in a separate class library.
        ///     </para>
        /// </summary>
        /// <param name="services"> The <see cref="IServiceCollection" /> to add services to. </param>
        /// <param name="configureOptions">Method for configuring options for reverse engineering classes from an existing database.</param>
        /// <returns>The same service collection so that multiple calls can be chained.</returns>
        public static IServiceCollection AddHandlebarsScaffolding(this IServiceCollection services,
                                                                  Action <HandlebarsScaffoldingOptions> configureOptions)
        {
            var scaffoldingOptions = new HandlebarsScaffoldingOptions();

            if (configureOptions == null)
            {
                configureOptions = options => options.ReverseEngineerOptions = ReverseEngineerOptions.DbContextAndEntities;
            }
            configureOptions(scaffoldingOptions);
            services.Configure(configureOptions);

            Type dbContextGeneratorImpl;
            var  dbContextGeneratorType = typeof(ICSharpDbContextGenerator);

            if (scaffoldingOptions.ReverseEngineerOptions == ReverseEngineerOptions.DbContextOnly ||
                scaffoldingOptions.ReverseEngineerOptions == ReverseEngineerOptions.DbContextAndEntities)
            {
                dbContextGeneratorImpl = typeof(HbsCSharpDbContextGenerator);
            }
            else
            {
                dbContextGeneratorImpl = typeof(NullCSharpDbContextGenerator);
            }
            services.AddSingleton(dbContextGeneratorType, dbContextGeneratorImpl);

            Type entityGeneratorImpl;
            var  entityGeneratorType = typeof(ICSharpEntityTypeGenerator);

            if (scaffoldingOptions.ReverseEngineerOptions == ReverseEngineerOptions.EntitiesOnly ||
                scaffoldingOptions.ReverseEngineerOptions == ReverseEngineerOptions.DbContextAndEntities)
            {
                if (scaffoldingOptions.LanguageOptions == LanguageOptions.TypeScript)
                {
                    entityGeneratorImpl = typeof(HbsTypeScriptEntityTypeGenerator);
                }
                else
                {
                    entityGeneratorImpl = typeof(HbsCSharpEntityTypeGenerator);
                }
            }
            else
            {
                entityGeneratorImpl = typeof(NullCSharpEntityTypeGenerator);
            }

            services.AddSingleton(entityGeneratorType, entityGeneratorImpl);

            if (scaffoldingOptions.LanguageOptions == LanguageOptions.TypeScript)
            {
                services.AddSingleton <ITypeScriptHelper, TypeScriptHelper>();
                services.AddSingleton <IModelCodeGenerator, HbsTypeScriptModelGenerator>();
                services.AddSingleton <ITemplateLanguageService, TypeScriptTemplateLanguageService>();
            }
            else
            {
                services.AddSingleton <IModelCodeGenerator, HbsCSharpModelGenerator>();
                services.AddSingleton <ITemplateLanguageService, CSharpTemplateLanguageService>();
            }

            if (scaffoldingOptions.EnablePluralization)
            {
                services.AddSingleton <IPluralizer, HumanizerPluralizer>();
            }

            if (scaffoldingOptions.EmbeddedTemplatesAssembly != null)
            {
                services.AddSingleton <ITemplateFileService>(new EmbeddedResourceTemplateFileService(
                                                                 scaffoldingOptions.EmbeddedTemplatesAssembly, scaffoldingOptions.EmbeddedTemplatesNamespace));
            }
            else
            {
                services.AddSingleton <ITemplateFileService, FileSystemTemplateFileService>();
            }

            services.AddSingleton <IDbContextTemplateService, HbsDbContextTemplateService>();
            services.AddSingleton <IEntityTypeTemplateService, HbsEntityTypeTemplateService>();
            services.AddSingleton <IReverseEngineerScaffolder, HbsReverseEngineerScaffolder>();
            services.AddSingleton <IEntityTypeTransformationService, HbsEntityTypeTransformationService>();
            services.AddSingleton <IHbsHelperService, HbsHelperService>(provider =>
            {
                var helpers = new Dictionary <string, Action <TextWriter, Dictionary <string, object>, object[]> >
                {
                    { Constants.SpacesHelper, HandlebarsHelpers.SpacesHelper }
                };
                return(new HbsHelperService(helpers));
            });
            services.AddSingleton <IHbsBlockHelperService, HbsBlockHelperService>(provider =>
            {
                var helpers = new Dictionary <string, Action <TextWriter, HelperOptions, Dictionary <string, object>, object[]> >();
                return(new HbsBlockHelperService(helpers));
            });
            return(services);
        }
コード例 #7
0
        private static void AddSingletonForCSharpEntityTypeGenerator(IServiceCollection services, HandlebarsScaffoldingOptions options)
        {
            Type entityGeneratorImpl;
            var  entityGeneratorType = typeof(ICSharpEntityTypeGenerator);

            if (options.ReverseEngineerOptions == ReverseEngineerOptions.EntitiesOnly ||
                options.ReverseEngineerOptions == ReverseEngineerOptions.DbContextAndEntities)
            {
                entityGeneratorImpl = typeof(HbsCSharpEntityTypeGenerator);
            }
            else
            {
                entityGeneratorImpl = typeof(NullCSharpEntityTypeGenerator);
            }
            services.AddSingleton(entityGeneratorType, entityGeneratorImpl);
        }
コード例 #8
0
        private static void AddSingletonForCSharpEntityTypeConfigurationGenerator(IServiceCollection services, HandlebarsScaffoldingOptions options)
        {
            Type entityTypeCfgGeneratorImpl = null;
            var  entityTypeCfgGeneratorType = typeof(ICSharpEntityTypeConfigurationGenerator);

            if (options.ReverseEngineerOptions == ReverseEngineerOptions.DbContextOnly ||
                options.ReverseEngineerOptions == ReverseEngineerOptions.DbContextAndEntities)
            {
                if (options.RefineFluteAPI)
                {
                    entityTypeCfgGeneratorImpl = typeof(HbsCSharpEntityTypeConfigurationGenerator);
                }
            }

            if (entityTypeCfgGeneratorImpl == null)
            {
                entityTypeCfgGeneratorImpl = typeof(NullCSharpEntityTypeConfigurationGenerator);
            }

            services.AddSingleton(entityTypeCfgGeneratorType, entityTypeCfgGeneratorImpl);
        }
コード例 #9
0
        private static void AddSingletonForCSharpDbContextGenerator(IServiceCollection services, HandlebarsScaffoldingOptions options)
        {
            Type dbContextGeneratorImpl;
            var  dbContextGeneratorType = typeof(ICSharpDbContextGenerator);

            if (options.ReverseEngineerOptions == ReverseEngineerOptions.DbContextOnly ||
                options.ReverseEngineerOptions == ReverseEngineerOptions.DbContextAndEntities)
            {
                dbContextGeneratorImpl = typeof(HbsCSharpDbContextGeneratorEnhance);
            }
            else
            {
                dbContextGeneratorImpl = typeof(NullCSharpDbContextGenerator);
            }
            services.AddSingleton(dbContextGeneratorType, dbContextGeneratorImpl);
        }
コード例 #10
0
        /// <summary>
        ///     <para>
        ///        将Handlebars脚手架生成器注册为<see cref =“IServiceCollection”/>中的服务。
        ///        这允许您通过修改CodeTemplates文件夹中的Handlebars模板来自定义生成的DbContext和实体类型类。
        ///     </para>
        ///     <para>
        ///        有<paramref name =“options”/>,它允许您选择是仅生成DbContext类,
        ///        仅生成实体类型类,还是生成DbContext和实体类型类(默认值)。
        ///        这在将模型类放入a时非常有用。 单独的类库。
        ///     </para>
        /// </summary>
        /// <param name="services"> The <see cref="IServiceCollection" /> to add services to. </param>
        /// <param name="options">Options for reverse engineering classes from an existing database.</param>
        /// <returns>The same service collection so that multiple calls can be chained.</returns>
        public static IServiceCollection AddHandlebarsScaffolding(this IServiceCollection services, HandlebarsScaffoldingOptions options = null)
        {
            if (options == null)
            {
                options = HandlebarsScaffoldingOptions.Default;
            }

            services.AddSingleton <HandlebarsScaffoldingOptions>(options);
            AddSingletonForCSharpDbContextGenerator(services, options);
            AddSingletonForCSharpEntityTypeConfigurationGenerator(services, options);
            AddSingletonForCSharpEntityTypeGenerator(services, options);

            services.AddSingleton <ITemplateFileService, FileSystemTemplateFileService>();
            services.AddSingleton <IDbContextTemplateService, HbsDbContextTemplateService>();
            services.AddSingleton <IEntityTypeTemplateService, HbsEntityTypeTemplateService>();
            services.AddSingleton <IEntityTypeConfigurationTemplateService, HbsEntityTypeConfigurationTemplateService>();
            services.AddSingleton <IModelCodeGenerator, HbsCSharpModelGeneratorEnhance>();
            services.AddSingleton <IReverseEngineerScaffolder, HbsReverseEngineerScaffolderEnhance>();
            services.AddSingleton <IEntityTypeTransformationService, HbsEntityTypeTransformationService>();
            services.AddSingleton <IHbsHelperService, HbsHelperService>(provider =>
            {
                var helpers = new Dictionary <string, Action <TextWriter, Dictionary <string, object>, object[]> >
                {
                    { Constants.SpacesHelper, HandlebarsHelpers.SpacesHelper }
                };
                return(new HbsHelperService(helpers));
            });
            return(services);
        }