public static EntityFrameworkCoreProject Select(this EntityFrameworkCoreProject project, string pattern, Action <EntityFrameworkCoreProjectSettings> action = null)
        {
            var selection = project.Selections.FirstOrDefault(item => item.Pattern == pattern);

            if (selection == null)
            {
                var globalSettings = project.GlobalSelection().Settings;

                selection = new ProjectSelection <EntityFrameworkCoreProjectSettings>
                {
                    Pattern  = pattern,
                    Settings = new EntityFrameworkCoreProjectSettings
                    {
                        UseDataAnnotations        = globalSettings.UseDataAnnotations,
                        AddDataBindings           = globalSettings.AddDataBindings,
                        EntitiesWithDataContracts = globalSettings.EntitiesWithDataContracts
                    }
                };

                project.Selections.Add(selection);
            }

            action?.Invoke(selection.Settings);

            return(project);
        }
        public static void Scaffold(this EntityFrameworkCoreProject project)
        {
            foreach (var table in project.Database.Tables)
            {
                var selection = project.Selections.FirstOrDefault(item => item.Pattern == table.FullName) ?? project.GlobalSelection();

                var codeBuilder = new CSharpClassCodeBuilder
                {
                    ObjectDefinition = project.GetEntityClassDefinition(table, selection),
                    OutputDirectory  = project.OutputDirectory,
                    ForceOverwrite   = true
                };

                codeBuilder.TranslatedDefinition += (source, args) =>
                {
                    if (project.AuthorInfo != null)
                    {
                        codeBuilder.Lines.Insert(0, new CommentLine("// Author name: {0}", project.AuthorInfo.Name));
                        codeBuilder.Lines.Insert(1, new CommentLine("// Email: {0}", project.AuthorInfo.Email));
                        codeBuilder.Lines.Insert(2, new CodeLine());
                    }
                };

                project.Scaffolding(codeBuilder);

                codeBuilder.CreateFile();

                project.Scaffolded(codeBuilder);
            }
        }