From 1e61d5ebe57a59a44e791c5eb8aa4b6cf79bc02b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=AD=E6=98=8E=E9=94=8B?= Date: Fri, 9 Apr 2021 10:47:57 +0800 Subject: [PATCH 1/8] =?UTF-8?q?=E8=BF=81=E7=A7=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Services/Entities/CodeSetting.cs | 10 + .../Entities/CodeSettingConfiguration.cs | 4 +- .../20210409015544_SettingProject.Designer.cs | 518 ++++++++++++++++++ .../20210409015544_SettingProject.cs | 45 ++ .../DefaultDbContextModelSnapshot.cs | 14 + 5 files changed, 590 insertions(+), 1 deletion(-) create mode 100644 src/OSharp.CodeGenerator/Migrations/20210409015544_SettingProject.Designer.cs create mode 100644 src/OSharp.CodeGenerator/Migrations/20210409015544_SettingProject.cs diff --git a/src/OSharp.CodeGeneration/Services/Entities/CodeSetting.cs b/src/OSharp.CodeGeneration/Services/Entities/CodeSetting.cs index 815282c..a070ca0 100644 --- a/src/OSharp.CodeGeneration/Services/Entities/CodeSetting.cs +++ b/src/OSharp.CodeGeneration/Services/Entities/CodeSetting.cs @@ -66,6 +66,16 @@ namespace OSharp.CodeGeneration.Services.Entities /// 获取或设置 是否锁定当前信息 public bool IsLocked { get; set; } + /// + /// 获取或设置 所属项目编号 + /// + public Guid? ProjectId { get; set; } + + /// + /// 获取或设置 所属项目 + /// + public virtual CodeProject Project { get; set; } + /// /// 获取项目代码输出文件名 /// diff --git a/src/OSharp.CodeGeneration/Services/Entities/CodeSettingConfiguration.cs b/src/OSharp.CodeGeneration/Services/Entities/CodeSettingConfiguration.cs index a42c521..3b39a37 100644 --- a/src/OSharp.CodeGeneration/Services/Entities/CodeSettingConfiguration.cs +++ b/src/OSharp.CodeGeneration/Services/Entities/CodeSettingConfiguration.cs @@ -21,6 +21,8 @@ namespace OSharp.CodeGeneration.Services.Entities /// 重写以实现实体类型各个属性的数据库配置 /// 实体类型创建器 public override void Configure(EntityTypeBuilder builder) - { } + { + builder.HasOne(m => m.Project).WithMany().IsRequired(false); + } } } diff --git a/src/OSharp.CodeGenerator/Migrations/20210409015544_SettingProject.Designer.cs b/src/OSharp.CodeGenerator/Migrations/20210409015544_SettingProject.Designer.cs new file mode 100644 index 0000000..0e429f6 --- /dev/null +++ b/src/OSharp.CodeGenerator/Migrations/20210409015544_SettingProject.Designer.cs @@ -0,0 +1,518 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using OSharp.Entity; + +namespace OSharp.CodeGenerator.Migrations +{ + [DbContext(typeof(DefaultDbContext))] + [Migration("20210409015544_SettingProject")] + partial class SettingProject + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "5.0.5"); + + modelBuilder.Entity("OSharp.Authorization.EntityInfos.EntityInfo", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("AuditEnabled") + .HasColumnType("INTEGER"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("PropertyJson") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("TypeName") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("TypeName") + .IsUnique() + .HasDatabaseName("ClassFullNameIndex"); + + b.ToTable("Auth_EntityInfo"); + }); + + modelBuilder.Entity("OSharp.Authorization.Functions.Function", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("AccessType") + .HasColumnType("INTEGER"); + + b.Property("Action") + .HasColumnType("TEXT"); + + b.Property("Area") + .HasColumnType("TEXT"); + + b.Property("AuditEntityEnabled") + .HasColumnType("INTEGER"); + + b.Property("AuditOperationEnabled") + .HasColumnType("INTEGER"); + + b.Property("CacheExpirationSeconds") + .HasColumnType("INTEGER"); + + b.Property("Controller") + .HasColumnType("TEXT"); + + b.Property("IsAccessTypeChanged") + .HasColumnType("INTEGER"); + + b.Property("IsAjax") + .HasColumnType("INTEGER"); + + b.Property("IsCacheSliding") + .HasColumnType("INTEGER"); + + b.Property("IsController") + .HasColumnType("INTEGER"); + + b.Property("IsLocked") + .HasColumnType("INTEGER"); + + b.Property("IsSlaveDatabase") + .HasColumnType("INTEGER"); + + b.Property("Name") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("Area", "Controller", "Action") + .IsUnique() + .HasDatabaseName("AreaControllerActionIndex"); + + b.ToTable("Auth_Function"); + }); + + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("Addable") + .HasColumnType("INTEGER"); + + b.Property("CreatedTime") + .HasColumnType("TEXT"); + + b.Property("Deletable") + .HasColumnType("INTEGER"); + + b.Property("Display") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("TEXT"); + + b.Property("HasCreatedTime") + .HasColumnType("INTEGER"); + + b.Property("HasCreationAudited") + .HasColumnType("INTEGER"); + + b.Property("HasLocked") + .HasColumnType("INTEGER"); + + b.Property("HasSoftDeleted") + .HasColumnType("INTEGER"); + + b.Property("HasUpdateAudited") + .HasColumnType("INTEGER"); + + b.Property("IsDataAuth") + .HasColumnType("INTEGER"); + + b.Property("IsLocked") + .HasColumnType("INTEGER"); + + b.Property("Listable") + .HasColumnType("INTEGER"); + + b.Property("ModuleId") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("TEXT"); + + b.Property("Order") + .HasColumnType("INTEGER"); + + b.Property("PrimaryKeyTypeFullName") + .IsRequired() + .HasMaxLength(500) + .HasColumnType("TEXT"); + + b.Property("Updatable") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("ModuleId"); + + b.ToTable("CodeGen_CodeEntity"); + }); + + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeForeign", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("DeleteBehavior") + .HasColumnType("INTEGER"); + + b.Property("EntityId") + .HasColumnType("TEXT"); + + b.Property("ForeignRelation") + .HasColumnType("INTEGER"); + + b.Property("IsRequired") + .HasColumnType("INTEGER"); + + b.Property("OtherEntity") + .HasColumnType("TEXT"); + + b.Property("OtherNavigation") + .HasColumnType("TEXT"); + + b.Property("SelfForeignKey") + .HasColumnType("TEXT"); + + b.Property("SelfNavigation") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("EntityId"); + + b.ToTable("CodeGen_CodeForeign"); + }); + + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeModule", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedTime") + .HasColumnType("TEXT"); + + b.Property("Display") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("TEXT"); + + b.Property("IsLocked") + .HasColumnType("INTEGER"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("TEXT"); + + b.Property("Order") + .HasColumnType("INTEGER"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("ProjectId"); + + b.ToTable("CodeGen_CodeModule"); + }); + + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeProject", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("Company") + .HasMaxLength(200) + .HasColumnType("TEXT"); + + b.Property("Copyright") + .HasMaxLength(500) + .HasColumnType("TEXT"); + + b.Property("CreatedTime") + .HasColumnType("TEXT"); + + b.Property("Creator") + .HasMaxLength(200) + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("TEXT"); + + b.Property("NamespacePrefix") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("TEXT"); + + b.Property("SiteUrl") + .HasMaxLength(500) + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.ToTable("CodeGen_CodeProject"); + }); + + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeProperty", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedTime") + .HasColumnType("TEXT"); + + b.Property("DataAuthFlag") + .HasColumnType("TEXT"); + + b.Property("DefaultValue") + .HasColumnType("TEXT"); + + b.Property("Display") + .HasMaxLength(200) + .HasColumnType("TEXT"); + + b.Property("EntityId") + .HasColumnType("TEXT"); + + b.Property("Filterable") + .HasColumnType("INTEGER"); + + b.Property("IsForeignKey") + .HasColumnType("INTEGER"); + + b.Property("IsInputDto") + .HasColumnType("INTEGER"); + + b.Property("IsLocked") + .HasColumnType("INTEGER"); + + b.Property("IsNavigation") + .HasColumnType("INTEGER"); + + b.Property("IsNullable") + .HasColumnType("INTEGER"); + + b.Property("IsOutputDto") + .HasColumnType("INTEGER"); + + b.Property("IsRequired") + .HasColumnType("INTEGER"); + + b.Property("IsVirtual") + .HasColumnType("INTEGER"); + + b.Property("MaxLength") + .HasColumnType("INTEGER"); + + b.Property("MinLength") + .HasColumnType("INTEGER"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("TEXT"); + + b.Property("Order") + .HasColumnType("INTEGER"); + + b.Property("RelateEntity") + .HasColumnType("TEXT"); + + b.Property("Sortable") + .HasColumnType("INTEGER"); + + b.Property("TypeName") + .IsRequired() + .HasMaxLength(500) + .HasColumnType("TEXT"); + + b.Property("Updatable") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("EntityId"); + + b.ToTable("CodeGen_CodeProperty"); + }); + + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeSetting", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("IsLocked") + .HasColumnType("INTEGER"); + + b.Property("IsOnce") + .HasColumnType("INTEGER"); + + b.Property("IsSystem") + .HasColumnType("INTEGER"); + + b.Property("MetadataType") + .HasColumnType("INTEGER"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("TEXT"); + + b.Property("Order") + .HasColumnType("INTEGER"); + + b.Property("OutputFileFormat") + .IsRequired() + .HasMaxLength(300) + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("TemplateFile") + .IsRequired() + .HasMaxLength(500) + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("ProjectId"); + + b.ToTable("CodeGen_CodeSetting"); + }); + + modelBuilder.Entity("OSharp.Core.Systems.KeyValue", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("IsLocked") + .HasColumnType("INTEGER"); + + b.Property("Key") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ValueJson") + .HasColumnType("TEXT"); + + b.Property("ValueType") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("Key") + .IsUnique() + .HasDatabaseName("KeyIndex"); + + b.ToTable("Systems_KeyValue"); + }); + + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeEntity", b => + { + b.HasOne("OSharp.CodeGeneration.Services.Entities.CodeModule", "Module") + .WithMany("Entities") + .HasForeignKey("ModuleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Module"); + }); + + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeForeign", b => + { + b.HasOne("OSharp.CodeGeneration.Services.Entities.CodeEntity", "Entity") + .WithMany() + .HasForeignKey("EntityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Entity"); + }); + + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeModule", b => + { + b.HasOne("OSharp.CodeGeneration.Services.Entities.CodeProject", "Project") + .WithMany("Modules") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeProperty", b => + { + b.HasOne("OSharp.CodeGeneration.Services.Entities.CodeEntity", "Entity") + .WithMany("Properties") + .HasForeignKey("EntityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Entity"); + }); + + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeSetting", b => + { + b.HasOne("OSharp.CodeGeneration.Services.Entities.CodeProject", "Project") + .WithMany() + .HasForeignKey("ProjectId"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeEntity", b => + { + b.Navigation("Properties"); + }); + + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeModule", b => + { + b.Navigation("Entities"); + }); + + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeProject", b => + { + b.Navigation("Modules"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/OSharp.CodeGenerator/Migrations/20210409015544_SettingProject.cs b/src/OSharp.CodeGenerator/Migrations/20210409015544_SettingProject.cs new file mode 100644 index 0000000..2a1f971 --- /dev/null +++ b/src/OSharp.CodeGenerator/Migrations/20210409015544_SettingProject.cs @@ -0,0 +1,45 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +namespace OSharp.CodeGenerator.Migrations +{ + public partial class SettingProject : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "ProjectId", + table: "CodeGen_CodeSetting", + type: "TEXT", + nullable: true); + + migrationBuilder.CreateIndex( + name: "IX_CodeGen_CodeSetting_ProjectId", + table: "CodeGen_CodeSetting", + column: "ProjectId"); + + migrationBuilder.AddForeignKey( + name: "FK_CodeGen_CodeSetting_CodeGen_CodeProject_ProjectId", + table: "CodeGen_CodeSetting", + column: "ProjectId", + principalTable: "CodeGen_CodeProject", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey( + name: "FK_CodeGen_CodeSetting_CodeGen_CodeProject_ProjectId", + table: "CodeGen_CodeSetting"); + + migrationBuilder.DropIndex( + name: "IX_CodeGen_CodeSetting_ProjectId", + table: "CodeGen_CodeSetting"); + + migrationBuilder.DropColumn( + name: "ProjectId", + table: "CodeGen_CodeSetting"); + } + } +} diff --git a/src/OSharp.CodeGenerator/Migrations/DefaultDbContextModelSnapshot.cs b/src/OSharp.CodeGenerator/Migrations/DefaultDbContextModelSnapshot.cs index 26e5557..f48ca32 100644 --- a/src/OSharp.CodeGenerator/Migrations/DefaultDbContextModelSnapshot.cs +++ b/src/OSharp.CodeGenerator/Migrations/DefaultDbContextModelSnapshot.cs @@ -400,6 +400,9 @@ namespace OSharp.CodeGenerator.Migrations .HasMaxLength(300) .HasColumnType("TEXT"); + b.Property("ProjectId") + .HasColumnType("TEXT"); + b.Property("TemplateFile") .IsRequired() .HasMaxLength(500) @@ -407,6 +410,8 @@ namespace OSharp.CodeGenerator.Migrations b.HasKey("Id"); + b.HasIndex("ProjectId"); + b.ToTable("CodeGen_CodeSetting"); }); @@ -482,6 +487,15 @@ namespace OSharp.CodeGenerator.Migrations b.Navigation("Entity"); }); + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeSetting", b => + { + b.HasOne("OSharp.CodeGeneration.Services.Entities.CodeProject", "Project") + .WithMany() + .HasForeignKey("ProjectId"); + + b.Navigation("Project"); + }); + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeEntity", b => { b.Navigation("Properties"); -- Gitee From c009a2a5bb42b3416ea055ad7bfd550deec91cc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=AD=E6=98=8E=E9=94=8B?= Date: Fri, 9 Apr 2021 11:55:37 +0800 Subject: [PATCH 2/8] =?UTF-8?q?=E8=BF=81=E7=A7=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../20210403122046_Init.Designer.cs | 338 ------------ .../20210404022217_entity.Designer.cs | 359 ------------- .../Migrations/20210404022217_entity.cs | 91 ---- .../20210408061345_AddOrder.Designer.cs | 415 -------------- .../Migrations/20210408061345_AddOrder.cs | 241 --------- .../20210408161331_SettingForeign.Designer.cs | 504 ------------------ .../20210408161331_SettingForeign.cs | 69 --- .../20210409015544_SettingProject.cs | 45 -- ...ner.cs => 20210409024821_Init.Designer.cs} | 4 +- ...3122046_Init.cs => 20210409024821_Init.cs} | 99 +++- 10 files changed, 98 insertions(+), 2067 deletions(-) delete mode 100644 src/OSharp.CodeGenerator/Migrations/20210403122046_Init.Designer.cs delete mode 100644 src/OSharp.CodeGenerator/Migrations/20210404022217_entity.Designer.cs delete mode 100644 src/OSharp.CodeGenerator/Migrations/20210404022217_entity.cs delete mode 100644 src/OSharp.CodeGenerator/Migrations/20210408061345_AddOrder.Designer.cs delete mode 100644 src/OSharp.CodeGenerator/Migrations/20210408061345_AddOrder.cs delete mode 100644 src/OSharp.CodeGenerator/Migrations/20210408161331_SettingForeign.Designer.cs delete mode 100644 src/OSharp.CodeGenerator/Migrations/20210408161331_SettingForeign.cs delete mode 100644 src/OSharp.CodeGenerator/Migrations/20210409015544_SettingProject.cs rename src/OSharp.CodeGenerator/Migrations/{20210409015544_SettingProject.Designer.cs => 20210409024821_Init.Designer.cs} (99%) rename src/OSharp.CodeGenerator/Migrations/{20210403122046_Init.cs => 20210409024821_Init.cs} (63%) diff --git a/src/OSharp.CodeGenerator/Migrations/20210403122046_Init.Designer.cs b/src/OSharp.CodeGenerator/Migrations/20210403122046_Init.Designer.cs deleted file mode 100644 index 42b02ce..0000000 --- a/src/OSharp.CodeGenerator/Migrations/20210403122046_Init.Designer.cs +++ /dev/null @@ -1,338 +0,0 @@ -// -using System; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using OSharp.Entity; - -namespace OSharp.CodeGenerator.Migrations -{ - [DbContext(typeof(DefaultDbContext))] - [Migration("20210403122046_Init")] - partial class Init - { - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "5.0.4"); - - modelBuilder.Entity("OSharp.Authorization.EntityInfos.EntityInfo", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("AuditEnabled") - .HasColumnType("INTEGER"); - - b.Property("Name") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("PropertyJson") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("TypeName") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("TypeName") - .IsUnique() - .HasDatabaseName("ClassFullNameIndex"); - - b.ToTable("Auth_EntityInfo"); - }); - - modelBuilder.Entity("OSharp.Authorization.Functions.Function", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("AccessType") - .HasColumnType("INTEGER"); - - b.Property("Action") - .HasColumnType("TEXT"); - - b.Property("Area") - .HasColumnType("TEXT"); - - b.Property("AuditEntityEnabled") - .HasColumnType("INTEGER"); - - b.Property("AuditOperationEnabled") - .HasColumnType("INTEGER"); - - b.Property("CacheExpirationSeconds") - .HasColumnType("INTEGER"); - - b.Property("Controller") - .HasColumnType("TEXT"); - - b.Property("IsAccessTypeChanged") - .HasColumnType("INTEGER"); - - b.Property("IsAjax") - .HasColumnType("INTEGER"); - - b.Property("IsCacheSliding") - .HasColumnType("INTEGER"); - - b.Property("IsController") - .HasColumnType("INTEGER"); - - b.Property("IsLocked") - .HasColumnType("INTEGER"); - - b.Property("IsSlaveDatabase") - .HasColumnType("INTEGER"); - - b.Property("Name") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("Area", "Controller", "Action") - .IsUnique() - .HasDatabaseName("AreaControllerActionIndex"); - - b.ToTable("Auth_Function"); - }); - - modelBuilder.Entity("OSharp.CodeGeneration.Entities.CodeEntity", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("Display") - .IsRequired() - .HasMaxLength(200) - .HasColumnType("TEXT"); - - b.Property("IsDataAuth") - .HasColumnType("INTEGER"); - - b.Property("ModuleId") - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(200) - .HasColumnType("TEXT"); - - b.Property("PrimaryKeyTypeFullName") - .IsRequired() - .HasMaxLength(500) - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("ModuleId"); - - b.ToTable("CodeGen_CodeEntity"); - }); - - modelBuilder.Entity("OSharp.CodeGeneration.Entities.CodeModule", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("Display") - .IsRequired() - .HasMaxLength(200) - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(200) - .HasColumnType("TEXT"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("ProjectId"); - - b.ToTable("CodeGen_CodeModule"); - }); - - modelBuilder.Entity("OSharp.CodeGeneration.Entities.CodeProject", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("Company") - .HasMaxLength(200) - .HasColumnType("TEXT"); - - b.Property("Copyright") - .HasMaxLength(500) - .HasColumnType("TEXT"); - - b.Property("Creator") - .HasMaxLength(200) - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(200) - .HasColumnType("TEXT"); - - b.Property("NamespacePrefix") - .IsRequired() - .HasMaxLength(200) - .HasColumnType("TEXT"); - - b.Property("SiteUrl") - .HasMaxLength(500) - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.ToTable("CodeGen_CodeProject"); - }); - - modelBuilder.Entity("OSharp.CodeGeneration.Entities.CodeProperty", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("Display") - .IsRequired() - .HasMaxLength(200) - .HasColumnType("TEXT"); - - b.Property("EntityId") - .HasColumnType("TEXT"); - - b.Property("IsForeignKey") - .HasColumnType("INTEGER"); - - b.Property("IsInputDto") - .HasColumnType("INTEGER"); - - b.Property("IsNullable") - .HasColumnType("INTEGER"); - - b.Property("IsOutputDto") - .HasColumnType("INTEGER"); - - b.Property("IsRequired") - .HasColumnType("INTEGER"); - - b.Property("IsVirtual") - .HasColumnType("INTEGER"); - - b.Property("MaxLength") - .HasColumnType("INTEGER"); - - b.Property("MinLength") - .HasColumnType("INTEGER"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(200) - .HasColumnType("TEXT"); - - b.Property("TypeName") - .IsRequired() - .HasMaxLength(500) - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("EntityId"); - - b.ToTable("CodeGen_CodeProperty"); - }); - - modelBuilder.Entity("OSharp.Core.Systems.KeyValue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("IsLocked") - .HasColumnType("INTEGER"); - - b.Property("Key") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("ValueJson") - .HasColumnType("TEXT"); - - b.Property("ValueType") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("Key") - .IsUnique() - .HasDatabaseName("KeyIndex"); - - b.ToTable("Systems_KeyValue"); - }); - - modelBuilder.Entity("OSharp.CodeGeneration.Entities.CodeEntity", b => - { - b.HasOne("OSharp.CodeGeneration.Entities.CodeModule", "Module") - .WithMany("Entities") - .HasForeignKey("ModuleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Module"); - }); - - modelBuilder.Entity("OSharp.CodeGeneration.Entities.CodeModule", b => - { - b.HasOne("OSharp.CodeGeneration.Entities.CodeProject", "Project") - .WithMany("Modules") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Project"); - }); - - modelBuilder.Entity("OSharp.CodeGeneration.Entities.CodeProperty", b => - { - b.HasOne("OSharp.CodeGeneration.Entities.CodeEntity", "Entity") - .WithMany("Properties") - .HasForeignKey("EntityId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Entity"); - }); - - modelBuilder.Entity("OSharp.CodeGeneration.Entities.CodeEntity", b => - { - b.Navigation("Properties"); - }); - - modelBuilder.Entity("OSharp.CodeGeneration.Entities.CodeModule", b => - { - b.Navigation("Entities"); - }); - - modelBuilder.Entity("OSharp.CodeGeneration.Entities.CodeProject", b => - { - b.Navigation("Modules"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/OSharp.CodeGenerator/Migrations/20210404022217_entity.Designer.cs b/src/OSharp.CodeGenerator/Migrations/20210404022217_entity.Designer.cs deleted file mode 100644 index 57d1de5..0000000 --- a/src/OSharp.CodeGenerator/Migrations/20210404022217_entity.Designer.cs +++ /dev/null @@ -1,359 +0,0 @@ -// -using System; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using OSharp.Entity; - -namespace OSharp.CodeGenerator.Migrations -{ - [DbContext(typeof(DefaultDbContext))] - [Migration("20210404022217_entity")] - partial class entity - { - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "5.0.4"); - - modelBuilder.Entity("OSharp.Authorization.EntityInfos.EntityInfo", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("AuditEnabled") - .HasColumnType("INTEGER"); - - b.Property("Name") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("PropertyJson") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("TypeName") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("TypeName") - .IsUnique() - .HasDatabaseName("ClassFullNameIndex"); - - b.ToTable("Auth_EntityInfo"); - }); - - modelBuilder.Entity("OSharp.Authorization.Functions.Function", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("AccessType") - .HasColumnType("INTEGER"); - - b.Property("Action") - .HasColumnType("TEXT"); - - b.Property("Area") - .HasColumnType("TEXT"); - - b.Property("AuditEntityEnabled") - .HasColumnType("INTEGER"); - - b.Property("AuditOperationEnabled") - .HasColumnType("INTEGER"); - - b.Property("CacheExpirationSeconds") - .HasColumnType("INTEGER"); - - b.Property("Controller") - .HasColumnType("TEXT"); - - b.Property("IsAccessTypeChanged") - .HasColumnType("INTEGER"); - - b.Property("IsAjax") - .HasColumnType("INTEGER"); - - b.Property("IsCacheSliding") - .HasColumnType("INTEGER"); - - b.Property("IsController") - .HasColumnType("INTEGER"); - - b.Property("IsLocked") - .HasColumnType("INTEGER"); - - b.Property("IsSlaveDatabase") - .HasColumnType("INTEGER"); - - b.Property("Name") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("Area", "Controller", "Action") - .IsUnique() - .HasDatabaseName("AreaControllerActionIndex"); - - b.ToTable("Auth_Function"); - }); - - modelBuilder.Entity("OSharp.CodeGeneration.Entities.CodeEntity", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedTime") - .HasColumnType("TEXT"); - - b.Property("Display") - .IsRequired() - .HasMaxLength(200) - .HasColumnType("TEXT"); - - b.Property("IsDataAuth") - .HasColumnType("INTEGER"); - - b.Property("IsLocked") - .HasColumnType("INTEGER"); - - b.Property("ModuleId") - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(200) - .HasColumnType("TEXT"); - - b.Property("PrimaryKeyTypeFullName") - .IsRequired() - .HasMaxLength(500) - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("ModuleId"); - - b.ToTable("CodeGen_CodeEntity"); - }); - - modelBuilder.Entity("OSharp.CodeGeneration.Entities.CodeModule", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedTime") - .HasColumnType("TEXT"); - - b.Property("Display") - .IsRequired() - .HasMaxLength(200) - .HasColumnType("TEXT"); - - b.Property("IsLocked") - .HasColumnType("INTEGER"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(200) - .HasColumnType("TEXT"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("ProjectId"); - - b.ToTable("CodeGen_CodeModule"); - }); - - modelBuilder.Entity("OSharp.CodeGeneration.Entities.CodeProject", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("Company") - .HasMaxLength(200) - .HasColumnType("TEXT"); - - b.Property("Copyright") - .HasMaxLength(500) - .HasColumnType("TEXT"); - - b.Property("CreatedTime") - .HasColumnType("TEXT"); - - b.Property("Creator") - .HasMaxLength(200) - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(200) - .HasColumnType("TEXT"); - - b.Property("NamespacePrefix") - .IsRequired() - .HasMaxLength(200) - .HasColumnType("TEXT"); - - b.Property("SiteUrl") - .HasMaxLength(500) - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.ToTable("CodeGen_CodeProject"); - }); - - modelBuilder.Entity("OSharp.CodeGeneration.Entities.CodeProperty", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedTime") - .HasColumnType("TEXT"); - - b.Property("Display") - .IsRequired() - .HasMaxLength(200) - .HasColumnType("TEXT"); - - b.Property("EntityId") - .HasColumnType("TEXT"); - - b.Property("IsForeignKey") - .HasColumnType("INTEGER"); - - b.Property("IsInputDto") - .HasColumnType("INTEGER"); - - b.Property("IsLocked") - .HasColumnType("INTEGER"); - - b.Property("IsNullable") - .HasColumnType("INTEGER"); - - b.Property("IsOutputDto") - .HasColumnType("INTEGER"); - - b.Property("IsRequired") - .HasColumnType("INTEGER"); - - b.Property("IsVirtual") - .HasColumnType("INTEGER"); - - b.Property("MaxLength") - .HasColumnType("INTEGER"); - - b.Property("MinLength") - .HasColumnType("INTEGER"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(200) - .HasColumnType("TEXT"); - - b.Property("TypeName") - .IsRequired() - .HasMaxLength(500) - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("EntityId"); - - b.ToTable("CodeGen_CodeProperty"); - }); - - modelBuilder.Entity("OSharp.Core.Systems.KeyValue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("IsLocked") - .HasColumnType("INTEGER"); - - b.Property("Key") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("ValueJson") - .HasColumnType("TEXT"); - - b.Property("ValueType") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("Key") - .IsUnique() - .HasDatabaseName("KeyIndex"); - - b.ToTable("Systems_KeyValue"); - }); - - modelBuilder.Entity("OSharp.CodeGeneration.Entities.CodeEntity", b => - { - b.HasOne("OSharp.CodeGeneration.Entities.CodeModule", "Module") - .WithMany("Entities") - .HasForeignKey("ModuleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Module"); - }); - - modelBuilder.Entity("OSharp.CodeGeneration.Entities.CodeModule", b => - { - b.HasOne("OSharp.CodeGeneration.Entities.CodeProject", "Project") - .WithMany("Modules") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Project"); - }); - - modelBuilder.Entity("OSharp.CodeGeneration.Entities.CodeProperty", b => - { - b.HasOne("OSharp.CodeGeneration.Entities.CodeEntity", "Entity") - .WithMany("Properties") - .HasForeignKey("EntityId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Entity"); - }); - - modelBuilder.Entity("OSharp.CodeGeneration.Entities.CodeEntity", b => - { - b.Navigation("Properties"); - }); - - modelBuilder.Entity("OSharp.CodeGeneration.Entities.CodeModule", b => - { - b.Navigation("Entities"); - }); - - modelBuilder.Entity("OSharp.CodeGeneration.Entities.CodeProject", b => - { - b.Navigation("Modules"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/OSharp.CodeGenerator/Migrations/20210404022217_entity.cs b/src/OSharp.CodeGenerator/Migrations/20210404022217_entity.cs deleted file mode 100644 index 65032b3..0000000 --- a/src/OSharp.CodeGenerator/Migrations/20210404022217_entity.cs +++ /dev/null @@ -1,91 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -namespace OSharp.CodeGenerator.Migrations -{ - public partial class entity : Migration - { - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.AddColumn( - name: "CreatedTime", - table: "CodeGen_CodeProperty", - type: "TEXT", - nullable: false, - defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified)); - - migrationBuilder.AddColumn( - name: "IsLocked", - table: "CodeGen_CodeProperty", - type: "INTEGER", - nullable: false, - defaultValue: false); - - migrationBuilder.AddColumn( - name: "CreatedTime", - table: "CodeGen_CodeProject", - type: "TEXT", - nullable: false, - defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified)); - - migrationBuilder.AddColumn( - name: "CreatedTime", - table: "CodeGen_CodeModule", - type: "TEXT", - nullable: false, - defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified)); - - migrationBuilder.AddColumn( - name: "IsLocked", - table: "CodeGen_CodeModule", - type: "INTEGER", - nullable: false, - defaultValue: false); - - migrationBuilder.AddColumn( - name: "CreatedTime", - table: "CodeGen_CodeEntity", - type: "TEXT", - nullable: false, - defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified)); - - migrationBuilder.AddColumn( - name: "IsLocked", - table: "CodeGen_CodeEntity", - type: "INTEGER", - nullable: false, - defaultValue: false); - } - - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropColumn( - name: "CreatedTime", - table: "CodeGen_CodeProperty"); - - migrationBuilder.DropColumn( - name: "IsLocked", - table: "CodeGen_CodeProperty"); - - migrationBuilder.DropColumn( - name: "CreatedTime", - table: "CodeGen_CodeProject"); - - migrationBuilder.DropColumn( - name: "CreatedTime", - table: "CodeGen_CodeModule"); - - migrationBuilder.DropColumn( - name: "IsLocked", - table: "CodeGen_CodeModule"); - - migrationBuilder.DropColumn( - name: "CreatedTime", - table: "CodeGen_CodeEntity"); - - migrationBuilder.DropColumn( - name: "IsLocked", - table: "CodeGen_CodeEntity"); - } - } -} diff --git a/src/OSharp.CodeGenerator/Migrations/20210408061345_AddOrder.Designer.cs b/src/OSharp.CodeGenerator/Migrations/20210408061345_AddOrder.Designer.cs deleted file mode 100644 index cd17eba..0000000 --- a/src/OSharp.CodeGenerator/Migrations/20210408061345_AddOrder.Designer.cs +++ /dev/null @@ -1,415 +0,0 @@ -// -using System; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using OSharp.Entity; - -namespace OSharp.CodeGenerator.Migrations -{ - [DbContext(typeof(DefaultDbContext))] - [Migration("20210408061345_AddOrder")] - partial class AddOrder - { - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "5.0.5"); - - modelBuilder.Entity("OSharp.Authorization.EntityInfos.EntityInfo", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("AuditEnabled") - .HasColumnType("INTEGER"); - - b.Property("Name") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("PropertyJson") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("TypeName") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("TypeName") - .IsUnique() - .HasDatabaseName("ClassFullNameIndex"); - - b.ToTable("Auth_EntityInfo"); - }); - - modelBuilder.Entity("OSharp.Authorization.Functions.Function", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("AccessType") - .HasColumnType("INTEGER"); - - b.Property("Action") - .HasColumnType("TEXT"); - - b.Property("Area") - .HasColumnType("TEXT"); - - b.Property("AuditEntityEnabled") - .HasColumnType("INTEGER"); - - b.Property("AuditOperationEnabled") - .HasColumnType("INTEGER"); - - b.Property("CacheExpirationSeconds") - .HasColumnType("INTEGER"); - - b.Property("Controller") - .HasColumnType("TEXT"); - - b.Property("IsAccessTypeChanged") - .HasColumnType("INTEGER"); - - b.Property("IsAjax") - .HasColumnType("INTEGER"); - - b.Property("IsCacheSliding") - .HasColumnType("INTEGER"); - - b.Property("IsController") - .HasColumnType("INTEGER"); - - b.Property("IsLocked") - .HasColumnType("INTEGER"); - - b.Property("IsSlaveDatabase") - .HasColumnType("INTEGER"); - - b.Property("Name") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("Area", "Controller", "Action") - .IsUnique() - .HasDatabaseName("AreaControllerActionIndex"); - - b.ToTable("Auth_Function"); - }); - - modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeEntity", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("Addable") - .HasColumnType("INTEGER"); - - b.Property("CreatedTime") - .HasColumnType("TEXT"); - - b.Property("Deletable") - .HasColumnType("INTEGER"); - - b.Property("Display") - .IsRequired() - .HasMaxLength(200) - .HasColumnType("TEXT"); - - b.Property("HasCreatedTime") - .HasColumnType("INTEGER"); - - b.Property("HasCreationAudited") - .HasColumnType("INTEGER"); - - b.Property("HasLocked") - .HasColumnType("INTEGER"); - - b.Property("HasSoftDeleted") - .HasColumnType("INTEGER"); - - b.Property("HasUpdateAudited") - .HasColumnType("INTEGER"); - - b.Property("IsDataAuth") - .HasColumnType("INTEGER"); - - b.Property("IsLocked") - .HasColumnType("INTEGER"); - - b.Property("Listable") - .HasColumnType("INTEGER"); - - b.Property("ModuleId") - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(200) - .HasColumnType("TEXT"); - - b.Property("Order") - .HasColumnType("INTEGER"); - - b.Property("PrimaryKeyTypeFullName") - .IsRequired() - .HasMaxLength(500) - .HasColumnType("TEXT"); - - b.Property("Updatable") - .HasColumnType("INTEGER"); - - b.HasKey("Id"); - - b.HasIndex("ModuleId"); - - b.ToTable("CodeGen_CodeEntity"); - }); - - modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeModule", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedTime") - .HasColumnType("TEXT"); - - b.Property("Display") - .IsRequired() - .HasMaxLength(200) - .HasColumnType("TEXT"); - - b.Property("IsLocked") - .HasColumnType("INTEGER"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(200) - .HasColumnType("TEXT"); - - b.Property("Order") - .HasColumnType("INTEGER"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("ProjectId"); - - b.ToTable("CodeGen_CodeModule"); - }); - - modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeProject", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("Company") - .HasMaxLength(200) - .HasColumnType("TEXT"); - - b.Property("Copyright") - .HasMaxLength(500) - .HasColumnType("TEXT"); - - b.Property("CreatedTime") - .HasColumnType("TEXT"); - - b.Property("Creator") - .HasMaxLength(200) - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(200) - .HasColumnType("TEXT"); - - b.Property("NamespacePrefix") - .IsRequired() - .HasMaxLength(200) - .HasColumnType("TEXT"); - - b.Property("SiteUrl") - .HasMaxLength(500) - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.ToTable("CodeGen_CodeProject"); - }); - - modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeProperty", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedTime") - .HasColumnType("TEXT"); - - b.Property("DataAuthFlag") - .HasColumnType("TEXT"); - - b.Property("DefaultValue") - .HasColumnType("TEXT"); - - b.Property("Display") - .HasMaxLength(200) - .HasColumnType("TEXT"); - - b.Property("EntityId") - .HasColumnType("TEXT"); - - b.Property("Filterable") - .HasColumnType("INTEGER"); - - b.Property("IsForeignKey") - .HasColumnType("INTEGER"); - - b.Property("IsInputDto") - .HasColumnType("INTEGER"); - - b.Property("IsLocked") - .HasColumnType("INTEGER"); - - b.Property("IsNavigation") - .HasColumnType("INTEGER"); - - b.Property("IsNullable") - .HasColumnType("INTEGER"); - - b.Property("IsOutputDto") - .HasColumnType("INTEGER"); - - b.Property("IsRequired") - .HasColumnType("INTEGER"); - - b.Property("IsVirtual") - .HasColumnType("INTEGER"); - - b.Property("MaxLength") - .HasColumnType("INTEGER"); - - b.Property("MinLength") - .HasColumnType("INTEGER"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(200) - .HasColumnType("TEXT"); - - b.Property("Order") - .HasColumnType("INTEGER"); - - b.Property("RelateEntity") - .HasColumnType("TEXT"); - - b.Property("Sortable") - .HasColumnType("INTEGER"); - - b.Property("TypeName") - .IsRequired() - .HasMaxLength(500) - .HasColumnType("TEXT"); - - b.Property("Updatable") - .HasColumnType("INTEGER"); - - b.HasKey("Id"); - - b.HasIndex("EntityId"); - - b.ToTable("CodeGen_CodeProperty"); - }); - - modelBuilder.Entity("OSharp.Core.Systems.KeyValue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("IsLocked") - .HasColumnType("INTEGER"); - - b.Property("Key") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("ValueJson") - .HasColumnType("TEXT"); - - b.Property("ValueType") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("Key") - .IsUnique() - .HasDatabaseName("KeyIndex"); - - b.ToTable("Systems_KeyValue"); - }); - - modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeEntity", b => - { - b.HasOne("OSharp.CodeGeneration.Services.Entities.CodeModule", "Module") - .WithMany("Entities") - .HasForeignKey("ModuleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Module"); - }); - - modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeModule", b => - { - b.HasOne("OSharp.CodeGeneration.Services.Entities.CodeProject", "Project") - .WithMany("Modules") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Project"); - }); - - modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeProperty", b => - { - b.HasOne("OSharp.CodeGeneration.Services.Entities.CodeEntity", "Entity") - .WithMany("Properties") - .HasForeignKey("EntityId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Entity"); - }); - - modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeEntity", b => - { - b.Navigation("Properties"); - }); - - modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeModule", b => - { - b.Navigation("Entities"); - }); - - modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeProject", b => - { - b.Navigation("Modules"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/OSharp.CodeGenerator/Migrations/20210408061345_AddOrder.cs b/src/OSharp.CodeGenerator/Migrations/20210408061345_AddOrder.cs deleted file mode 100644 index 9eade27..0000000 --- a/src/OSharp.CodeGenerator/Migrations/20210408061345_AddOrder.cs +++ /dev/null @@ -1,241 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -namespace OSharp.CodeGenerator.Migrations -{ - public partial class AddOrder : Migration - { - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.AlterColumn( - name: "Display", - table: "CodeGen_CodeProperty", - type: "TEXT", - maxLength: 200, - nullable: true, - oldClrType: typeof(string), - oldType: "TEXT", - oldMaxLength: 200); - - migrationBuilder.AddColumn( - name: "DataAuthFlag", - table: "CodeGen_CodeProperty", - type: "TEXT", - nullable: true); - - migrationBuilder.AddColumn( - name: "DefaultValue", - table: "CodeGen_CodeProperty", - type: "TEXT", - nullable: true); - - migrationBuilder.AddColumn( - name: "Filterable", - table: "CodeGen_CodeProperty", - type: "INTEGER", - nullable: false, - defaultValue: false); - - migrationBuilder.AddColumn( - name: "IsNavigation", - table: "CodeGen_CodeProperty", - type: "INTEGER", - nullable: false, - defaultValue: false); - - migrationBuilder.AddColumn( - name: "Order", - table: "CodeGen_CodeProperty", - type: "INTEGER", - nullable: false, - defaultValue: 0); - - migrationBuilder.AddColumn( - name: "RelateEntity", - table: "CodeGen_CodeProperty", - type: "TEXT", - nullable: true); - - migrationBuilder.AddColumn( - name: "Sortable", - table: "CodeGen_CodeProperty", - type: "INTEGER", - nullable: false, - defaultValue: false); - - migrationBuilder.AddColumn( - name: "Updatable", - table: "CodeGen_CodeProperty", - type: "INTEGER", - nullable: false, - defaultValue: false); - - migrationBuilder.AddColumn( - name: "Order", - table: "CodeGen_CodeModule", - type: "INTEGER", - nullable: false, - defaultValue: 0); - - migrationBuilder.AddColumn( - name: "Addable", - table: "CodeGen_CodeEntity", - type: "INTEGER", - nullable: false, - defaultValue: false); - - migrationBuilder.AddColumn( - name: "Deletable", - table: "CodeGen_CodeEntity", - type: "INTEGER", - nullable: false, - defaultValue: false); - - migrationBuilder.AddColumn( - name: "HasCreatedTime", - table: "CodeGen_CodeEntity", - type: "INTEGER", - nullable: false, - defaultValue: false); - - migrationBuilder.AddColumn( - name: "HasCreationAudited", - table: "CodeGen_CodeEntity", - type: "INTEGER", - nullable: false, - defaultValue: false); - - migrationBuilder.AddColumn( - name: "HasLocked", - table: "CodeGen_CodeEntity", - type: "INTEGER", - nullable: false, - defaultValue: false); - - migrationBuilder.AddColumn( - name: "HasSoftDeleted", - table: "CodeGen_CodeEntity", - type: "INTEGER", - nullable: false, - defaultValue: false); - - migrationBuilder.AddColumn( - name: "HasUpdateAudited", - table: "CodeGen_CodeEntity", - type: "INTEGER", - nullable: false, - defaultValue: false); - - migrationBuilder.AddColumn( - name: "Listable", - table: "CodeGen_CodeEntity", - type: "INTEGER", - nullable: false, - defaultValue: false); - - migrationBuilder.AddColumn( - name: "Order", - table: "CodeGen_CodeEntity", - type: "INTEGER", - nullable: false, - defaultValue: 0); - - migrationBuilder.AddColumn( - name: "Updatable", - table: "CodeGen_CodeEntity", - type: "INTEGER", - nullable: false, - defaultValue: false); - } - - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropColumn( - name: "DataAuthFlag", - table: "CodeGen_CodeProperty"); - - migrationBuilder.DropColumn( - name: "DefaultValue", - table: "CodeGen_CodeProperty"); - - migrationBuilder.DropColumn( - name: "Filterable", - table: "CodeGen_CodeProperty"); - - migrationBuilder.DropColumn( - name: "IsNavigation", - table: "CodeGen_CodeProperty"); - - migrationBuilder.DropColumn( - name: "Order", - table: "CodeGen_CodeProperty"); - - migrationBuilder.DropColumn( - name: "RelateEntity", - table: "CodeGen_CodeProperty"); - - migrationBuilder.DropColumn( - name: "Sortable", - table: "CodeGen_CodeProperty"); - - migrationBuilder.DropColumn( - name: "Updatable", - table: "CodeGen_CodeProperty"); - - migrationBuilder.DropColumn( - name: "Order", - table: "CodeGen_CodeModule"); - - migrationBuilder.DropColumn( - name: "Addable", - table: "CodeGen_CodeEntity"); - - migrationBuilder.DropColumn( - name: "Deletable", - table: "CodeGen_CodeEntity"); - - migrationBuilder.DropColumn( - name: "HasCreatedTime", - table: "CodeGen_CodeEntity"); - - migrationBuilder.DropColumn( - name: "HasCreationAudited", - table: "CodeGen_CodeEntity"); - - migrationBuilder.DropColumn( - name: "HasLocked", - table: "CodeGen_CodeEntity"); - - migrationBuilder.DropColumn( - name: "HasSoftDeleted", - table: "CodeGen_CodeEntity"); - - migrationBuilder.DropColumn( - name: "HasUpdateAudited", - table: "CodeGen_CodeEntity"); - - migrationBuilder.DropColumn( - name: "Listable", - table: "CodeGen_CodeEntity"); - - migrationBuilder.DropColumn( - name: "Order", - table: "CodeGen_CodeEntity"); - - migrationBuilder.DropColumn( - name: "Updatable", - table: "CodeGen_CodeEntity"); - - migrationBuilder.AlterColumn( - name: "Display", - table: "CodeGen_CodeProperty", - type: "TEXT", - maxLength: 200, - nullable: false, - defaultValue: "", - oldClrType: typeof(string), - oldType: "TEXT", - oldMaxLength: 200, - oldNullable: true); - } - } -} diff --git a/src/OSharp.CodeGenerator/Migrations/20210408161331_SettingForeign.Designer.cs b/src/OSharp.CodeGenerator/Migrations/20210408161331_SettingForeign.Designer.cs deleted file mode 100644 index 2fea93d..0000000 --- a/src/OSharp.CodeGenerator/Migrations/20210408161331_SettingForeign.Designer.cs +++ /dev/null @@ -1,504 +0,0 @@ -// -using System; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using OSharp.Entity; - -namespace OSharp.CodeGenerator.Migrations -{ - [DbContext(typeof(DefaultDbContext))] - [Migration("20210408161331_SettingForeign")] - partial class SettingForeign - { - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "5.0.5"); - - modelBuilder.Entity("OSharp.Authorization.EntityInfos.EntityInfo", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("AuditEnabled") - .HasColumnType("INTEGER"); - - b.Property("Name") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("PropertyJson") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("TypeName") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("TypeName") - .IsUnique() - .HasDatabaseName("ClassFullNameIndex"); - - b.ToTable("Auth_EntityInfo"); - }); - - modelBuilder.Entity("OSharp.Authorization.Functions.Function", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("AccessType") - .HasColumnType("INTEGER"); - - b.Property("Action") - .HasColumnType("TEXT"); - - b.Property("Area") - .HasColumnType("TEXT"); - - b.Property("AuditEntityEnabled") - .HasColumnType("INTEGER"); - - b.Property("AuditOperationEnabled") - .HasColumnType("INTEGER"); - - b.Property("CacheExpirationSeconds") - .HasColumnType("INTEGER"); - - b.Property("Controller") - .HasColumnType("TEXT"); - - b.Property("IsAccessTypeChanged") - .HasColumnType("INTEGER"); - - b.Property("IsAjax") - .HasColumnType("INTEGER"); - - b.Property("IsCacheSliding") - .HasColumnType("INTEGER"); - - b.Property("IsController") - .HasColumnType("INTEGER"); - - b.Property("IsLocked") - .HasColumnType("INTEGER"); - - b.Property("IsSlaveDatabase") - .HasColumnType("INTEGER"); - - b.Property("Name") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("Area", "Controller", "Action") - .IsUnique() - .HasDatabaseName("AreaControllerActionIndex"); - - b.ToTable("Auth_Function"); - }); - - modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeEntity", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("Addable") - .HasColumnType("INTEGER"); - - b.Property("CreatedTime") - .HasColumnType("TEXT"); - - b.Property("Deletable") - .HasColumnType("INTEGER"); - - b.Property("Display") - .IsRequired() - .HasMaxLength(200) - .HasColumnType("TEXT"); - - b.Property("HasCreatedTime") - .HasColumnType("INTEGER"); - - b.Property("HasCreationAudited") - .HasColumnType("INTEGER"); - - b.Property("HasLocked") - .HasColumnType("INTEGER"); - - b.Property("HasSoftDeleted") - .HasColumnType("INTEGER"); - - b.Property("HasUpdateAudited") - .HasColumnType("INTEGER"); - - b.Property("IsDataAuth") - .HasColumnType("INTEGER"); - - b.Property("IsLocked") - .HasColumnType("INTEGER"); - - b.Property("Listable") - .HasColumnType("INTEGER"); - - b.Property("ModuleId") - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(200) - .HasColumnType("TEXT"); - - b.Property("Order") - .HasColumnType("INTEGER"); - - b.Property("PrimaryKeyTypeFullName") - .IsRequired() - .HasMaxLength(500) - .HasColumnType("TEXT"); - - b.Property("Updatable") - .HasColumnType("INTEGER"); - - b.HasKey("Id"); - - b.HasIndex("ModuleId"); - - b.ToTable("CodeGen_CodeEntity"); - }); - - modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeForeign", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("DeleteBehavior") - .HasColumnType("INTEGER"); - - b.Property("EntityId") - .HasColumnType("TEXT"); - - b.Property("ForeignRelation") - .HasColumnType("INTEGER"); - - b.Property("IsRequired") - .HasColumnType("INTEGER"); - - b.Property("OtherEntity") - .HasColumnType("TEXT"); - - b.Property("OtherNavigation") - .HasColumnType("TEXT"); - - b.Property("SelfForeignKey") - .HasColumnType("TEXT"); - - b.Property("SelfNavigation") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("EntityId"); - - b.ToTable("CodeGen_CodeForeign"); - }); - - modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeModule", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedTime") - .HasColumnType("TEXT"); - - b.Property("Display") - .IsRequired() - .HasMaxLength(200) - .HasColumnType("TEXT"); - - b.Property("IsLocked") - .HasColumnType("INTEGER"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(200) - .HasColumnType("TEXT"); - - b.Property("Order") - .HasColumnType("INTEGER"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("ProjectId"); - - b.ToTable("CodeGen_CodeModule"); - }); - - modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeProject", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("Company") - .HasMaxLength(200) - .HasColumnType("TEXT"); - - b.Property("Copyright") - .HasMaxLength(500) - .HasColumnType("TEXT"); - - b.Property("CreatedTime") - .HasColumnType("TEXT"); - - b.Property("Creator") - .HasMaxLength(200) - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(200) - .HasColumnType("TEXT"); - - b.Property("NamespacePrefix") - .IsRequired() - .HasMaxLength(200) - .HasColumnType("TEXT"); - - b.Property("SiteUrl") - .HasMaxLength(500) - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.ToTable("CodeGen_CodeProject"); - }); - - modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeProperty", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedTime") - .HasColumnType("TEXT"); - - b.Property("DataAuthFlag") - .HasColumnType("TEXT"); - - b.Property("DefaultValue") - .HasColumnType("TEXT"); - - b.Property("Display") - .HasMaxLength(200) - .HasColumnType("TEXT"); - - b.Property("EntityId") - .HasColumnType("TEXT"); - - b.Property("Filterable") - .HasColumnType("INTEGER"); - - b.Property("IsForeignKey") - .HasColumnType("INTEGER"); - - b.Property("IsInputDto") - .HasColumnType("INTEGER"); - - b.Property("IsLocked") - .HasColumnType("INTEGER"); - - b.Property("IsNavigation") - .HasColumnType("INTEGER"); - - b.Property("IsNullable") - .HasColumnType("INTEGER"); - - b.Property("IsOutputDto") - .HasColumnType("INTEGER"); - - b.Property("IsRequired") - .HasColumnType("INTEGER"); - - b.Property("IsVirtual") - .HasColumnType("INTEGER"); - - b.Property("MaxLength") - .HasColumnType("INTEGER"); - - b.Property("MinLength") - .HasColumnType("INTEGER"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(200) - .HasColumnType("TEXT"); - - b.Property("Order") - .HasColumnType("INTEGER"); - - b.Property("RelateEntity") - .HasColumnType("TEXT"); - - b.Property("Sortable") - .HasColumnType("INTEGER"); - - b.Property("TypeName") - .IsRequired() - .HasMaxLength(500) - .HasColumnType("TEXT"); - - b.Property("Updatable") - .HasColumnType("INTEGER"); - - b.HasKey("Id"); - - b.HasIndex("EntityId"); - - b.ToTable("CodeGen_CodeProperty"); - }); - - modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeSetting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("IsLocked") - .HasColumnType("INTEGER"); - - b.Property("IsOnce") - .HasColumnType("INTEGER"); - - b.Property("IsSystem") - .HasColumnType("INTEGER"); - - b.Property("MetadataType") - .HasColumnType("INTEGER"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(200) - .HasColumnType("TEXT"); - - b.Property("Order") - .HasColumnType("INTEGER"); - - b.Property("OutputFileFormat") - .IsRequired() - .HasMaxLength(300) - .HasColumnType("TEXT"); - - b.Property("TemplateFile") - .IsRequired() - .HasMaxLength(500) - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.ToTable("CodeGen_CodeSetting"); - }); - - modelBuilder.Entity("OSharp.Core.Systems.KeyValue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("IsLocked") - .HasColumnType("INTEGER"); - - b.Property("Key") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("ValueJson") - .HasColumnType("TEXT"); - - b.Property("ValueType") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("Key") - .IsUnique() - .HasDatabaseName("KeyIndex"); - - b.ToTable("Systems_KeyValue"); - }); - - modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeEntity", b => - { - b.HasOne("OSharp.CodeGeneration.Services.Entities.CodeModule", "Module") - .WithMany("Entities") - .HasForeignKey("ModuleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Module"); - }); - - modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeForeign", b => - { - b.HasOne("OSharp.CodeGeneration.Services.Entities.CodeEntity", "Entity") - .WithMany() - .HasForeignKey("EntityId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Entity"); - }); - - modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeModule", b => - { - b.HasOne("OSharp.CodeGeneration.Services.Entities.CodeProject", "Project") - .WithMany("Modules") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Project"); - }); - - modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeProperty", b => - { - b.HasOne("OSharp.CodeGeneration.Services.Entities.CodeEntity", "Entity") - .WithMany("Properties") - .HasForeignKey("EntityId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Entity"); - }); - - modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeEntity", b => - { - b.Navigation("Properties"); - }); - - modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeModule", b => - { - b.Navigation("Entities"); - }); - - modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeProject", b => - { - b.Navigation("Modules"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/OSharp.CodeGenerator/Migrations/20210408161331_SettingForeign.cs b/src/OSharp.CodeGenerator/Migrations/20210408161331_SettingForeign.cs deleted file mode 100644 index c834551..0000000 --- a/src/OSharp.CodeGenerator/Migrations/20210408161331_SettingForeign.cs +++ /dev/null @@ -1,69 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -namespace OSharp.CodeGenerator.Migrations -{ - public partial class SettingForeign : Migration - { - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "CodeGen_CodeForeign", - columns: table => new - { - Id = table.Column(type: "TEXT", nullable: false), - SelfNavigation = table.Column(type: "TEXT", nullable: true), - SelfForeignKey = table.Column(type: "TEXT", nullable: true), - OtherEntity = table.Column(type: "TEXT", nullable: true), - OtherNavigation = table.Column(type: "TEXT", nullable: true), - IsRequired = table.Column(type: "INTEGER", nullable: false), - DeleteBehavior = table.Column(type: "INTEGER", nullable: true), - ForeignRelation = table.Column(type: "INTEGER", nullable: false), - EntityId = table.Column(type: "TEXT", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_CodeGen_CodeForeign", x => x.Id); - table.ForeignKey( - name: "FK_CodeGen_CodeForeign_CodeGen_CodeEntity_EntityId", - column: x => x.EntityId, - principalTable: "CodeGen_CodeEntity", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "CodeGen_CodeSetting", - columns: table => new - { - Id = table.Column(type: "TEXT", nullable: false), - Name = table.Column(type: "TEXT", maxLength: 200, nullable: false), - MetadataType = table.Column(type: "INTEGER", nullable: false), - TemplateFile = table.Column(type: "TEXT", maxLength: 500, nullable: false), - Order = table.Column(type: "INTEGER", nullable: false), - OutputFileFormat = table.Column(type: "TEXT", maxLength: 300, nullable: false), - IsOnce = table.Column(type: "INTEGER", nullable: false), - IsSystem = table.Column(type: "INTEGER", nullable: false), - IsLocked = table.Column(type: "INTEGER", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_CodeGen_CodeSetting", x => x.Id); - }); - - migrationBuilder.CreateIndex( - name: "IX_CodeGen_CodeForeign_EntityId", - table: "CodeGen_CodeForeign", - column: "EntityId"); - } - - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "CodeGen_CodeForeign"); - - migrationBuilder.DropTable( - name: "CodeGen_CodeSetting"); - } - } -} diff --git a/src/OSharp.CodeGenerator/Migrations/20210409015544_SettingProject.cs b/src/OSharp.CodeGenerator/Migrations/20210409015544_SettingProject.cs deleted file mode 100644 index 2a1f971..0000000 --- a/src/OSharp.CodeGenerator/Migrations/20210409015544_SettingProject.cs +++ /dev/null @@ -1,45 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -namespace OSharp.CodeGenerator.Migrations -{ - public partial class SettingProject : Migration - { - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.AddColumn( - name: "ProjectId", - table: "CodeGen_CodeSetting", - type: "TEXT", - nullable: true); - - migrationBuilder.CreateIndex( - name: "IX_CodeGen_CodeSetting_ProjectId", - table: "CodeGen_CodeSetting", - column: "ProjectId"); - - migrationBuilder.AddForeignKey( - name: "FK_CodeGen_CodeSetting_CodeGen_CodeProject_ProjectId", - table: "CodeGen_CodeSetting", - column: "ProjectId", - principalTable: "CodeGen_CodeProject", - principalColumn: "Id", - onDelete: ReferentialAction.Restrict); - } - - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropForeignKey( - name: "FK_CodeGen_CodeSetting_CodeGen_CodeProject_ProjectId", - table: "CodeGen_CodeSetting"); - - migrationBuilder.DropIndex( - name: "IX_CodeGen_CodeSetting_ProjectId", - table: "CodeGen_CodeSetting"); - - migrationBuilder.DropColumn( - name: "ProjectId", - table: "CodeGen_CodeSetting"); - } - } -} diff --git a/src/OSharp.CodeGenerator/Migrations/20210409015544_SettingProject.Designer.cs b/src/OSharp.CodeGenerator/Migrations/20210409024821_Init.Designer.cs similarity index 99% rename from src/OSharp.CodeGenerator/Migrations/20210409015544_SettingProject.Designer.cs rename to src/OSharp.CodeGenerator/Migrations/20210409024821_Init.Designer.cs index 0e429f6..af36b65 100644 --- a/src/OSharp.CodeGenerator/Migrations/20210409015544_SettingProject.Designer.cs +++ b/src/OSharp.CodeGenerator/Migrations/20210409024821_Init.Designer.cs @@ -9,8 +9,8 @@ using OSharp.Entity; namespace OSharp.CodeGenerator.Migrations { [DbContext(typeof(DefaultDbContext))] - [Migration("20210409015544_SettingProject")] - partial class SettingProject + [Migration("20210409024821_Init")] + partial class Init { protected override void BuildTargetModel(ModelBuilder modelBuilder) { diff --git a/src/OSharp.CodeGenerator/Migrations/20210403122046_Init.cs b/src/OSharp.CodeGenerator/Migrations/20210409024821_Init.cs similarity index 63% rename from src/OSharp.CodeGenerator/Migrations/20210403122046_Init.cs rename to src/OSharp.CodeGenerator/Migrations/20210409024821_Init.cs index f02818b..d0a6644 100644 --- a/src/OSharp.CodeGenerator/Migrations/20210403122046_Init.cs +++ b/src/OSharp.CodeGenerator/Migrations/20210409024821_Init.cs @@ -57,7 +57,8 @@ namespace OSharp.CodeGenerator.Migrations Company = table.Column(type: "TEXT", maxLength: 200, nullable: true), SiteUrl = table.Column(type: "TEXT", maxLength: 500, nullable: true), Creator = table.Column(type: "TEXT", maxLength: 200, nullable: true), - Copyright = table.Column(type: "TEXT", maxLength: 500, nullable: true) + Copyright = table.Column(type: "TEXT", maxLength: 500, nullable: true), + CreatedTime = table.Column(type: "TEXT", nullable: false) }, constraints: table => { @@ -86,6 +87,9 @@ namespace OSharp.CodeGenerator.Migrations Id = table.Column(type: "TEXT", nullable: false), Name = table.Column(type: "TEXT", maxLength: 200, nullable: false), Display = table.Column(type: "TEXT", maxLength: 200, nullable: false), + Order = table.Column(type: "INTEGER", nullable: false), + CreatedTime = table.Column(type: "TEXT", nullable: false), + IsLocked = table.Column(type: "INTEGER", nullable: false), ProjectId = table.Column(type: "TEXT", nullable: false) }, constraints: table => @@ -99,6 +103,32 @@ namespace OSharp.CodeGenerator.Migrations onDelete: ReferentialAction.Cascade); }); + migrationBuilder.CreateTable( + name: "CodeGen_CodeSetting", + columns: table => new + { + Id = table.Column(type: "TEXT", nullable: false), + Name = table.Column(type: "TEXT", maxLength: 200, nullable: false), + MetadataType = table.Column(type: "INTEGER", nullable: false), + TemplateFile = table.Column(type: "TEXT", maxLength: 500, nullable: false), + Order = table.Column(type: "INTEGER", nullable: false), + OutputFileFormat = table.Column(type: "TEXT", maxLength: 300, nullable: false), + IsOnce = table.Column(type: "INTEGER", nullable: false), + IsSystem = table.Column(type: "INTEGER", nullable: false), + IsLocked = table.Column(type: "INTEGER", nullable: false), + ProjectId = table.Column(type: "TEXT", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_CodeGen_CodeSetting", x => x.Id); + table.ForeignKey( + name: "FK_CodeGen_CodeSetting_CodeGen_CodeProject_ProjectId", + column: x => x.ProjectId, + principalTable: "CodeGen_CodeProject", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + }); + migrationBuilder.CreateTable( name: "CodeGen_CodeEntity", columns: table => new @@ -107,7 +137,19 @@ namespace OSharp.CodeGenerator.Migrations Name = table.Column(type: "TEXT", maxLength: 200, nullable: false), Display = table.Column(type: "TEXT", maxLength: 200, nullable: false), PrimaryKeyTypeFullName = table.Column(type: "TEXT", maxLength: 500, nullable: false), + Listable = table.Column(type: "INTEGER", nullable: false), + Addable = table.Column(type: "INTEGER", nullable: false), + Updatable = table.Column(type: "INTEGER", nullable: false), + Deletable = table.Column(type: "INTEGER", nullable: false), IsDataAuth = table.Column(type: "INTEGER", nullable: false), + HasCreatedTime = table.Column(type: "INTEGER", nullable: false), + HasLocked = table.Column(type: "INTEGER", nullable: false), + HasSoftDeleted = table.Column(type: "INTEGER", nullable: false), + HasCreationAudited = table.Column(type: "INTEGER", nullable: false), + HasUpdateAudited = table.Column(type: "INTEGER", nullable: false), + Order = table.Column(type: "INTEGER", nullable: false), + CreatedTime = table.Column(type: "TEXT", nullable: false), + IsLocked = table.Column(type: "INTEGER", nullable: false), ModuleId = table.Column(type: "TEXT", nullable: false) }, constraints: table => @@ -121,22 +163,57 @@ namespace OSharp.CodeGenerator.Migrations onDelete: ReferentialAction.Cascade); }); + migrationBuilder.CreateTable( + name: "CodeGen_CodeForeign", + columns: table => new + { + Id = table.Column(type: "TEXT", nullable: false), + SelfNavigation = table.Column(type: "TEXT", nullable: true), + SelfForeignKey = table.Column(type: "TEXT", nullable: true), + OtherEntity = table.Column(type: "TEXT", nullable: true), + OtherNavigation = table.Column(type: "TEXT", nullable: true), + IsRequired = table.Column(type: "INTEGER", nullable: false), + DeleteBehavior = table.Column(type: "INTEGER", nullable: true), + ForeignRelation = table.Column(type: "INTEGER", nullable: false), + EntityId = table.Column(type: "TEXT", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_CodeGen_CodeForeign", x => x.Id); + table.ForeignKey( + name: "FK_CodeGen_CodeForeign_CodeGen_CodeEntity_EntityId", + column: x => x.EntityId, + principalTable: "CodeGen_CodeEntity", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + migrationBuilder.CreateTable( name: "CodeGen_CodeProperty", columns: table => new { Id = table.Column(type: "TEXT", nullable: false), Name = table.Column(type: "TEXT", maxLength: 200, nullable: false), + Display = table.Column(type: "TEXT", maxLength: 200, nullable: true), TypeName = table.Column(type: "TEXT", maxLength: 500, nullable: false), - Display = table.Column(type: "TEXT", maxLength: 200, nullable: false), + Updatable = table.Column(type: "INTEGER", nullable: false), + Sortable = table.Column(type: "INTEGER", nullable: false), + Filterable = table.Column(type: "INTEGER", nullable: false), IsRequired = table.Column(type: "INTEGER", nullable: true), - MaxLength = table.Column(type: "INTEGER", nullable: true), MinLength = table.Column(type: "INTEGER", nullable: true), + MaxLength = table.Column(type: "INTEGER", nullable: true), IsNullable = table.Column(type: "INTEGER", nullable: false), IsVirtual = table.Column(type: "INTEGER", nullable: false), IsForeignKey = table.Column(type: "INTEGER", nullable: false), + IsNavigation = table.Column(type: "INTEGER", nullable: false), + RelateEntity = table.Column(type: "TEXT", nullable: true), + DataAuthFlag = table.Column(type: "TEXT", nullable: true), IsInputDto = table.Column(type: "INTEGER", nullable: false), IsOutputDto = table.Column(type: "INTEGER", nullable: false), + DefaultValue = table.Column(type: "TEXT", nullable: true), + Order = table.Column(type: "INTEGER", nullable: false), + CreatedTime = table.Column(type: "TEXT", nullable: false), + IsLocked = table.Column(type: "INTEGER", nullable: false), EntityId = table.Column(type: "TEXT", nullable: false) }, constraints: table => @@ -167,6 +244,11 @@ namespace OSharp.CodeGenerator.Migrations table: "CodeGen_CodeEntity", column: "ModuleId"); + migrationBuilder.CreateIndex( + name: "IX_CodeGen_CodeForeign_EntityId", + table: "CodeGen_CodeForeign", + column: "EntityId"); + migrationBuilder.CreateIndex( name: "IX_CodeGen_CodeModule_ProjectId", table: "CodeGen_CodeModule", @@ -177,6 +259,11 @@ namespace OSharp.CodeGenerator.Migrations table: "CodeGen_CodeProperty", column: "EntityId"); + migrationBuilder.CreateIndex( + name: "IX_CodeGen_CodeSetting_ProjectId", + table: "CodeGen_CodeSetting", + column: "ProjectId"); + migrationBuilder.CreateIndex( name: "KeyIndex", table: "Systems_KeyValue", @@ -192,9 +279,15 @@ namespace OSharp.CodeGenerator.Migrations migrationBuilder.DropTable( name: "Auth_Function"); + migrationBuilder.DropTable( + name: "CodeGen_CodeForeign"); + migrationBuilder.DropTable( name: "CodeGen_CodeProperty"); + migrationBuilder.DropTable( + name: "CodeGen_CodeSetting"); + migrationBuilder.DropTable( name: "Systems_KeyValue"); -- Gitee From 9529c771d0e98bab3aaf667eb96d74af6d7d6fcb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=AD=E6=98=8E=E9=94=8B?= Date: Fri, 9 Apr 2021 22:07:47 +0800 Subject: [PATCH 3/8] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=AE=8C=E6=AF=95=EF=BC=8C=E7=94=9F=E6=88=90?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=B5=8B=E8=AF=95=E6=AD=A3=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Data/AutoMapperConfiguration.cs | 33 ++++ .../Data/DesignTimeDefaultDbContextFactory.cs | 42 +++++ .../SqliteDefaultDbContextMigrationPack.cs | 39 ++++ src/OSharp.CodeConsoles/Data/Startup.cs | 41 +++++ .../OSharp.CodeConsoles.csproj | 7 + src/OSharp.CodeConsoles/Program.cs | 61 ++++++- src/OSharp.CodeConsoles/appsettings.json | 14 ++ .../Generates/CodeFile.cs | 3 +- .../Generates/ICodeGenerator.cs | 8 +- .../Generates/RazorCodeGenerator.cs | 71 ++++---- .../OSharp.CodeGeneration.csproj | 21 ++- .../Services/DataPack.cs | 7 + .../Services/DataService.CodeProject.cs | 32 ++++ ...Setting.cs => DataService.CodeTemplate.cs} | 22 +-- .../Services/DataService.cs | 2 +- .../Services/Entities/CodeEntity.cs | 5 + .../Entities/CodeForeignConfiguration.cs | 2 +- .../Services/Entities/CodeProject.cs | 4 + .../Services/Entities/CodeProjectTemplate.cs | 49 +++++ .../CodeProjectTemplateConfiguration.cs | 29 +++ .../Services/Entities/CodeProperty.cs | 5 + .../{CodeSetting.cs => CodeTemplate.cs} | 57 +++++- ...ration.cs => CodeTemplateConfiguration.cs} | 8 +- .../Services/IDataContract.cs | 36 ++-- .../Seeds/CodeEntitySeedDataInitializer.cs | 74 ++++++++ .../Seeds/CodeModuleSeedDataInitializer.cs | 56 ++++++ .../Seeds/CodeProjectSeedDataInitializer.cs | 52 ++++++ .../Seeds/CodePropertySeedDataInitializer.cs | 61 +++++++ .../Seeds/CodeTemplateSeedDataInitializer.cs | 65 +++++++ .../Templates/TestTemplate.cshtml | 17 -- .../Templates/cs_AdminController.cshtml | 46 +++++ .../Templates/cs_AdminControllerBase.cshtml | 170 +++++++++++++++++ .../Templates/cs_Entity.cshtml | 147 +++++++++++++++ .../Templates/cs_EntityConfiguration.cshtml | 172 ++++++++++++++++++ .../Templates/cs_InputDto.cshtml | 106 +++++++++++ .../Templates/cs_OutputDto.cshtml | 148 +++++++++++++++ .../Templates/cs_ServiceContract.cshtml | 102 +++++++++++ .../Templates/cs_ServiceEntityImplBase.cshtml | 111 +++++++++++ .../Templates/cs_ServiceMainImpl.cshtml | 41 +++++ .../Templates/cs_ServiceMainImplBase.cshtml | 94 ++++++++++ .../Templates/cs_ServicePack.cshtml | 60 ++++++ .../Templates/ng_AlainComponent.cshtml | 171 +++++++++++++++++ .../Templates/ng_AlainComponentHtml.cshtml | 39 ++++ .../Templates/ng_AlainModule.cshtml | 45 +++++ .../Templates/ng_AlainOther.cshtml | 86 +++++++++ .../Templates/ng_AlainRouting.cshtml | 47 +++++ ...ner.cs => 20210409133032_Init.Designer.cs} | 77 ++++++-- ...9024821_Init.cs => 20210409133032_Init.cs} | 66 +++++-- .../DefaultDbContextModelSnapshot.cs | 75 ++++++-- .../OSharp.CodeGenerator.csproj | 4 +- src/OSharp.CodeGenerator/appsettings.json | 4 +- .../osharp-code-generator.db | Bin 110592 -> 0 bytes 52 files changed, 2567 insertions(+), 167 deletions(-) create mode 100644 src/OSharp.CodeConsoles/Data/AutoMapperConfiguration.cs create mode 100644 src/OSharp.CodeConsoles/Data/DesignTimeDefaultDbContextFactory.cs create mode 100644 src/OSharp.CodeConsoles/Data/SqliteDefaultDbContextMigrationPack.cs create mode 100644 src/OSharp.CodeConsoles/Data/Startup.cs create mode 100644 src/OSharp.CodeConsoles/appsettings.json rename src/OSharp.CodeGeneration/Services/{DataService.CodeSetting.cs => DataService.CodeTemplate.cs} (78%) create mode 100644 src/OSharp.CodeGeneration/Services/Entities/CodeProjectTemplate.cs create mode 100644 src/OSharp.CodeGeneration/Services/Entities/CodeProjectTemplateConfiguration.cs rename src/OSharp.CodeGeneration/Services/Entities/{CodeSetting.cs => CodeTemplate.cs} (61%) rename src/OSharp.CodeGeneration/Services/Entities/{CodeSettingConfiguration.cs => CodeTemplateConfiguration.cs} (73%) create mode 100644 src/OSharp.CodeGeneration/Services/Seeds/CodeEntitySeedDataInitializer.cs create mode 100644 src/OSharp.CodeGeneration/Services/Seeds/CodeModuleSeedDataInitializer.cs create mode 100644 src/OSharp.CodeGeneration/Services/Seeds/CodeProjectSeedDataInitializer.cs create mode 100644 src/OSharp.CodeGeneration/Services/Seeds/CodePropertySeedDataInitializer.cs create mode 100644 src/OSharp.CodeGeneration/Services/Seeds/CodeTemplateSeedDataInitializer.cs delete mode 100644 src/OSharp.CodeGeneration/Templates/TestTemplate.cshtml create mode 100644 src/OSharp.CodeGeneration/Templates/cs_AdminController.cshtml create mode 100644 src/OSharp.CodeGeneration/Templates/cs_AdminControllerBase.cshtml create mode 100644 src/OSharp.CodeGeneration/Templates/cs_Entity.cshtml create mode 100644 src/OSharp.CodeGeneration/Templates/cs_EntityConfiguration.cshtml create mode 100644 src/OSharp.CodeGeneration/Templates/cs_InputDto.cshtml create mode 100644 src/OSharp.CodeGeneration/Templates/cs_OutputDto.cshtml create mode 100644 src/OSharp.CodeGeneration/Templates/cs_ServiceContract.cshtml create mode 100644 src/OSharp.CodeGeneration/Templates/cs_ServiceEntityImplBase.cshtml create mode 100644 src/OSharp.CodeGeneration/Templates/cs_ServiceMainImpl.cshtml create mode 100644 src/OSharp.CodeGeneration/Templates/cs_ServiceMainImplBase.cshtml create mode 100644 src/OSharp.CodeGeneration/Templates/cs_ServicePack.cshtml create mode 100644 src/OSharp.CodeGeneration/Templates/ng_AlainComponent.cshtml create mode 100644 src/OSharp.CodeGeneration/Templates/ng_AlainComponentHtml.cshtml create mode 100644 src/OSharp.CodeGeneration/Templates/ng_AlainModule.cshtml create mode 100644 src/OSharp.CodeGeneration/Templates/ng_AlainOther.cshtml create mode 100644 src/OSharp.CodeGeneration/Templates/ng_AlainRouting.cshtml rename src/OSharp.CodeGenerator/Migrations/{20210409024821_Init.Designer.cs => 20210409133032_Init.Designer.cs} (90%) rename src/OSharp.CodeGenerator/Migrations/{20210409024821_Init.cs => 20210409133032_Init.cs} (89%) delete mode 100644 src/OSharp.CodeGenerator/osharp-code-generator.db diff --git a/src/OSharp.CodeConsoles/Data/AutoMapperConfiguration.cs b/src/OSharp.CodeConsoles/Data/AutoMapperConfiguration.cs new file mode 100644 index 0000000..8430bae --- /dev/null +++ b/src/OSharp.CodeConsoles/Data/AutoMapperConfiguration.cs @@ -0,0 +1,33 @@ +// ----------------------------------------------------------------------- +// +// Copyright (c) 2014-2021 OSharp. All rights reserved. +// +// http://www.osharp.org +// 郭明锋 +// 2021-04-06 13:13 +// ----------------------------------------------------------------------- + +using Microsoft.Extensions.DependencyInjection; + +using OSharp.AutoMapper; +using OSharp.CodeGeneration.Services.Entities; +using OSharp.Dependency; + + +namespace OSharp.CodeConsoles.Data +{ + [Dependency(ServiceLifetime.Singleton)] + public class AutoMapperConfiguration : AutoMapperTupleBase + { + /// 创建对象映射 + public override void CreateMap() + { + CreateMap().ForMember(vm => vm.Namespace, opt => opt.Ignore()) + .ForMember(vm => vm.Project, opt => opt.Ignore()); + + CreateMap().ForMember(vm => vm.Module, opt => opt.Ignore()); + + CreateMap().ForMember(vm => vm.Entity, opt => opt.Ignore()); + } + } +} diff --git a/src/OSharp.CodeConsoles/Data/DesignTimeDefaultDbContextFactory.cs b/src/OSharp.CodeConsoles/Data/DesignTimeDefaultDbContextFactory.cs new file mode 100644 index 0000000..e24ebea --- /dev/null +++ b/src/OSharp.CodeConsoles/Data/DesignTimeDefaultDbContextFactory.cs @@ -0,0 +1,42 @@ +// ----------------------------------------------------------------------- +// +// Copyright (c) 2014-2020 OSharp. All rights reserved. +// +// http://www.osharp.org +// 郭明锋 +// 2020-08-25 23:16 +// ----------------------------------------------------------------------- + +using System; + +using Microsoft.Extensions.DependencyInjection; + +using OSharp.Entity; + + +namespace OSharp.CodeConsoles.Data +{ + public class DesignTimeDefaultDbContextFactory : DesignTimeDbContextFactoryBase + { + public DesignTimeDefaultDbContextFactory() + : base(null) + { } + + public DesignTimeDefaultDbContextFactory(IServiceProvider serviceProvider) + : base(serviceProvider) + { } + + /// + /// 创建设计时使用的ServiceProvider,主要用于执行 Add-Migration 功能 + /// + /// + protected override IServiceProvider CreateDesignTimeServiceProvider() + { + IServiceCollection services = new ServiceCollection(); + Startup startup = new Startup(); + startup.ConfigureServices(services); + IServiceProvider provider = services.BuildServiceProvider(); + return provider; + } + } +} diff --git a/src/OSharp.CodeConsoles/Data/SqliteDefaultDbContextMigrationPack.cs b/src/OSharp.CodeConsoles/Data/SqliteDefaultDbContextMigrationPack.cs new file mode 100644 index 0000000..78cff41 --- /dev/null +++ b/src/OSharp.CodeConsoles/Data/SqliteDefaultDbContextMigrationPack.cs @@ -0,0 +1,39 @@ +using System; +using System.ComponentModel; + +using OSharp.Core.Packs; +using OSharp.Entity; +using OSharp.Entity.Sqlite; + + +namespace OSharp.CodeConsoles.Data +{ + /// + /// Sqlite-DefaultDbContext迁移模块 + /// + [DependsOnPacks(typeof(SqliteEntityFrameworkCorePack))] + [Description("Sqlite-DefaultDbContext迁移模块")] + public class SqliteDefaultDbContextMigrationPack : MigrationPackBase + { + /// + /// 获取 模块启动顺序,模块启动的顺序先按级别启动,级别内部再按此顺序启动, + /// 级别默认为0,表示无依赖,需要在同级别有依赖顺序的时候,再重写为>0的顺序值 + /// + public override int Order => 2; + + /// + /// 获取 数据库类型 + /// + protected override DatabaseType DatabaseType => DatabaseType.Sqlite; + + /// + /// 重写实现获取数据上下文实例 + /// + /// 服务提供者 + /// + protected override DefaultDbContext CreateDbContext(IServiceProvider scopedProvider) + { + return new DesignTimeDefaultDbContextFactory(scopedProvider).CreateDbContext(new string[0]); + } + } +} diff --git a/src/OSharp.CodeConsoles/Data/Startup.cs b/src/OSharp.CodeConsoles/Data/Startup.cs new file mode 100644 index 0000000..cb9e61d --- /dev/null +++ b/src/OSharp.CodeConsoles/Data/Startup.cs @@ -0,0 +1,41 @@ +// ----------------------------------------------------------------------- +// +// Copyright (c) 2014-2020 OSharp. All rights reserved. +// +// http://www.osharp.org +// 郭明锋 +// 2020-08-26 10:26 +// ----------------------------------------------------------------------- + +using System; + +using Microsoft.Extensions.DependencyInjection; + +using OSharp.AutoMapper; +using OSharp.CodeGeneration.Generates; +using OSharp.CodeGeneration.Services; +using OSharp.Entity; +using OSharp.Entity.Sqlite; +using OSharp.Log4Net; + + +namespace OSharp.CodeConsoles.Data +{ + public class Startup + { + public void ConfigureServices(IServiceCollection services) + { + services.AddOSharp() + .AddPack() + .AddPack() + .AddPack() + .AddPack() + .AddPack(); + } + + public void Configure(IServiceProvider provider) + { + provider.UseOsharp(); + } + } +} diff --git a/src/OSharp.CodeConsoles/OSharp.CodeConsoles.csproj b/src/OSharp.CodeConsoles/OSharp.CodeConsoles.csproj index 5071d8d..1b58a47 100644 --- a/src/OSharp.CodeConsoles/OSharp.CodeConsoles.csproj +++ b/src/OSharp.CodeConsoles/OSharp.CodeConsoles.csproj @@ -7,6 +7,13 @@ + + + + + + Always + diff --git a/src/OSharp.CodeConsoles/Program.cs b/src/OSharp.CodeConsoles/Program.cs index 6a9251c..f5ee031 100644 --- a/src/OSharp.CodeConsoles/Program.cs +++ b/src/OSharp.CodeConsoles/Program.cs @@ -1,18 +1,35 @@ using System; +using System.Collections.Generic; using System.Diagnostics; +using System.IO; +using System.Linq; + +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.DependencyInjection; using MiniRazor; +using OSharp.CodeConsoles.Data; +using OSharp.CodeGeneration.Generates; +using OSharp.CodeGeneration.Services; using OSharp.CodeGeneration.Services.Entities; using OSharp.CodeGeneration.Templates; +using OSharp.Data; +using OSharp.Entity; +using OSharp.Extensions; +using OSharp.Json; namespace OSharp.CodeConsoles { class Program { + private static ServiceProvider _provider; + static void Main(string[] args) { + Init(); + bool exit = false; while (true) { @@ -80,14 +97,18 @@ namespace OSharp.CodeConsoles } } + private static void Init() + { + IServiceCollection services = new ServiceCollection(); + Startup startup = new Startup(); + startup.ConfigureServices(services); + _provider = services.BuildServiceProvider(); + startup.Configure(_provider); + } + private static async void Method01() { - var model = new CodeModule { Name = "Infos" }; - await TestTemplate.RenderAsync(Console.Out, model); - ITemplate tmp = new TestTemplate(); - tmp.Model = model; - tmp.Output = Console.Out; - await tmp.ExecuteAsync(); + } private static async void Method02() @@ -139,9 +160,33 @@ namespace OSharp.CodeConsoles throw new NotImplementedException(); } - private static void Method11() + private static async void Method11() { - throw new NotImplementedException(); + Console.WriteLine("请输入代码模板:"); + string input = Console.ReadLine(); + CodeProject project = null; + CodeTemplate template = null; + await _provider.ExecuteScopedWorkAsync(async provider => + { + IDataContract contract = provider.GetService(); + CodeProject[] projects = contract.GetCodeProject(m => true); + project = projects[0]; + template = contract.CodeTemplates.FirstOrDefault(m => m.Name == input); + }); + + if (template == null) + { + Console.WriteLine($"模板 {input} 不存在"); + return; + } + ICodeGenerator generator = _provider.GetService(); + + //var model = project.Modules.First().Entities.First(); + //var model = project.Modules.First(); + var model = project; + CodeFile file = await generator.GenerateCode(template, model); + File.WriteAllText(@"D:\Temp\11.txt", file.SourceCode); + Console.WriteLine(file.SourceCode); } } } diff --git a/src/OSharp.CodeConsoles/appsettings.json b/src/OSharp.CodeConsoles/appsettings.json new file mode 100644 index 0000000..ebd3b08 --- /dev/null +++ b/src/OSharp.CodeConsoles/appsettings.json @@ -0,0 +1,14 @@ +{ + "OSharp": { + "DbContexts": { + "Sqlite": { + "DbContextTypeName": "OSharp.Entity.DefaultDbContext,OSharp.EntityFrameworkCore", + "ConnectionString": "data source=d:/temp/osharp-code-generator.db", + "DatabaseType": "Sqlite", + "LazyLoadingProxiesEnabled": true, + "AuditEntityEnabled": false, + "AutoMigrationEnabled": true + } + } + } +} diff --git a/src/OSharp.CodeGeneration/Generates/CodeFile.cs b/src/OSharp.CodeGeneration/Generates/CodeFile.cs index b7f11ec..e511049 100644 --- a/src/OSharp.CodeGeneration/Generates/CodeFile.cs +++ b/src/OSharp.CodeGeneration/Generates/CodeFile.cs @@ -7,6 +7,7 @@ // 2021-04-08 21:39 // ----------------------------------------------------------------------- +using OSharp.CodeGeneration.Services.Entities; using OSharp.Extensions; @@ -22,7 +23,7 @@ namespace OSharp.CodeGeneration.Generates /// /// 获取或设置 代码配置 /// - public GenCodeConfig CodeConfig { get; set; } + public CodeTemplate Template { get; set; } /// /// 获取或设置 源代码字符串 diff --git a/src/OSharp.CodeGeneration/Generates/ICodeGenerator.cs b/src/OSharp.CodeGeneration/Generates/ICodeGenerator.cs index ad2f1b3..fe41452 100644 --- a/src/OSharp.CodeGeneration/Generates/ICodeGenerator.cs +++ b/src/OSharp.CodeGeneration/Generates/ICodeGenerator.cs @@ -25,27 +25,27 @@ namespace OSharp.CodeGeneration.Generates /// 要处理的代码配置集合 /// 代码项目信息 /// 输出的代码文件信息集合 - Task GenerateCodes(GenCodeConfig[] codeConfigs, CodeProject project); + Task GenerateCodes(CodeTemplate[] codeConfigs, CodeProject project); /// /// 生成项目元数据相关代码 /// 代码配置 /// 项目元数据 /// - Task GenerateCode(GenCodeConfig codeConfig, CodeProject project); + Task GenerateCode(CodeTemplate codeConfig, CodeProject project); /// /// 生成模块元数据相关代码 /// 代码配置 /// 模块元数据 /// - Task GenerateCode(GenCodeConfig codeConfig, CodeModule module); + Task GenerateCode(CodeTemplate codeConfig, CodeModule module); /// /// 生成实体元数据相关代码 /// 代码配置 /// 实体元数据 /// - Task GenerateCode(GenCodeConfig codeConfig, CodeEntity entity); + Task GenerateCode(CodeTemplate codeConfig, CodeEntity entity); } } diff --git a/src/OSharp.CodeGeneration/Generates/RazorCodeGenerator.cs b/src/OSharp.CodeGeneration/Generates/RazorCodeGenerator.cs index b87e169..7b95496 100644 --- a/src/OSharp.CodeGeneration/Generates/RazorCodeGenerator.cs +++ b/src/OSharp.CodeGeneration/Generates/RazorCodeGenerator.cs @@ -30,34 +30,34 @@ namespace OSharp.CodeGeneration.Generates /// /// 生成项目所有代码 /// - /// 要处理的代码配置集合 + /// 要处理的代码配置集合 /// 代码项目信息 /// 输出的代码文件信息集合 - public async Task GenerateCodes(GenCodeConfig[] codeConfigs, CodeProject project) + public async Task GenerateCodes(CodeTemplate[] templates, CodeProject project) { List codeFiles = new List(); CodeModule[] modules = project.Modules.ToArray(); CodeEntity[] entities = modules.SelectMany(m => m.Entities).ToArray(); - foreach (GenCodeConfig codeConfig in codeConfigs.Where(m => m.MetadataType == MetadataType.Entity)) + foreach (CodeTemplate template in templates.Where(m => m.MetadataType == MetadataType.Entity)) { foreach (CodeEntity entity in entities) { - codeFiles.Add(await GenerateCode(codeConfig, entity)); + codeFiles.Add(await GenerateCode(template, entity)); } } - foreach (GenCodeConfig codeConfig in codeConfigs.Where(m => m.MetadataType == MetadataType.Module)) + foreach (CodeTemplate template in templates.Where(m => m.MetadataType == MetadataType.Module)) { foreach (CodeModule module in modules) { - codeFiles.Add(await GenerateCode(codeConfig, module)); + codeFiles.Add(await GenerateCode(template, module)); } } - foreach (GenCodeConfig codeConfig in codeConfigs.Where(m => m.MetadataType == MetadataType.Project)) + foreach (CodeTemplate template in templates.Where(m => m.MetadataType == MetadataType.Project)) { - codeFiles.Add(await GenerateCode(codeConfig, project)); + codeFiles.Add(await GenerateCode(template, project)); } return codeFiles.OrderBy(m => m.FileName).ToArray(); @@ -65,73 +65,74 @@ namespace OSharp.CodeGeneration.Generates /// /// 生成项目元数据相关代码 - /// 代码配置 + /// 代码配置 /// 项目元数据 /// - public Task GenerateCode(GenCodeConfig codeConfig, CodeProject project) + public Task GenerateCode(CodeTemplate template, CodeProject project) { - string fileName = codeConfig.GetCodeFileName(project); - return GenerateCodeCore(codeConfig, project, fileName); + string fileName = template.GetCodeFileName(project); + return GenerateCodeCore(template, project, fileName); } /// /// 生成模块元数据相关代码 - /// 代码配置 + /// 代码配置 /// 模块元数据 /// - public Task GenerateCode(GenCodeConfig codeConfig, CodeModule module) + public Task GenerateCode(CodeTemplate template, CodeModule module) { - string fileName = codeConfig.GetCodeFileName(module); - return GenerateCodeCore(codeConfig, module, fileName); + string fileName = template.GetCodeFileName(module); + return GenerateCodeCore(template, module, fileName); } /// /// 生成实体元数据相关代码 - /// 代码配置 + /// 代码配置 /// 实体元数据 /// - public Task GenerateCode(GenCodeConfig codeConfig, CodeEntity entity) + public Task GenerateCode(CodeTemplate template, CodeEntity entity) { - string fileName = codeConfig.GetCodeFileName(entity); - return GenerateCodeCore(codeConfig, entity, fileName); + string fileName = template.GetCodeFileName(entity); + return GenerateCodeCore(template, entity, fileName); } /// /// 生成代码 /// - /// 代码配置 + /// 代码配置 /// 代码数据模型 /// 代码输出文件 /// - protected virtual async Task GenerateCodeCore(GenCodeConfig codeConfig, object model, string fileName) + protected virtual async Task GenerateCodeCore(CodeTemplate template, object model, string fileName) { StringBuilder sb = new StringBuilder(); await using TextWriter writer = new StringWriter(sb); - if (codeConfig.TemplateType == null) + if (template.TemplateFile == "内置") { - if (codeConfig.TemplateFile == null || !File.Exists(codeConfig.TemplateFile)) + Type innerTemplateType = template.GetInnerTemplateType(); + ITemplate template2 = (ITemplate)(Activator.CreateInstance(innerTemplateType) + ?? throw new OsharpException($"代码配置“{template.Name}”的模板类型实例化失败")); + template2.Model = model; + template2.Output = writer; + await template2.ExecuteAsync(); + } + else + { + if (template.TemplateFile == null || !File.Exists(template.TemplateFile)) { - throw new OsharpException($"代码配置“{codeConfig.Name}”的模板文件“{codeConfig.TemplateFile}”不存在"); + throw new OsharpException($"代码配置“{template.Name}”的模板文件“{template.TemplateFile}”不存在"); } - string templateSource = await File.ReadAllTextAsync(codeConfig.TemplateFile); + string templateSource = await File.ReadAllTextAsync(template.TemplateFile); TemplateDescriptor descriptor = Razor.Compile(templateSource); await descriptor.RenderAsync(writer, model); } - else - { - ITemplate template = (ITemplate)(Activator.CreateInstance(codeConfig.TemplateType) - ?? throw new OsharpException($"代码配置“{codeConfig.Name}”的模板类型实例化失败")); - template.Model = model; - template.Output = writer; - await template.ExecuteAsync(); - } string codeSource = sb.ToString(); CodeFile codeFile = new CodeFile() { - CodeConfig = codeConfig, + Template = template, SourceCode = codeSource, FileName = fileName }; diff --git a/src/OSharp.CodeGeneration/OSharp.CodeGeneration.csproj b/src/OSharp.CodeGeneration/OSharp.CodeGeneration.csproj index e7d8057..732a470 100644 --- a/src/OSharp.CodeGeneration/OSharp.CodeGeneration.csproj +++ b/src/OSharp.CodeGeneration/OSharp.CodeGeneration.csproj @@ -6,8 +6,8 @@ - - + + @@ -21,6 +21,23 @@ + + + + + + + + + + + + + + + + + <_Parameter1>OSharp.CodeConsoles diff --git a/src/OSharp.CodeGeneration/Services/DataPack.cs b/src/OSharp.CodeGeneration/Services/DataPack.cs index 0a01300..79741cf 100644 --- a/src/OSharp.CodeGeneration/Services/DataPack.cs +++ b/src/OSharp.CodeGeneration/Services/DataPack.cs @@ -1,6 +1,8 @@ using Microsoft.Extensions.DependencyInjection; +using OSharp.CodeGeneration.Services.Seeds; using OSharp.Core.Packs; +using OSharp.Entity; namespace OSharp.CodeGeneration.Services @@ -13,6 +15,11 @@ namespace OSharp.CodeGeneration.Services public override IServiceCollection AddServices(IServiceCollection services) { services.AddScoped(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); return base.AddServices(services); } diff --git a/src/OSharp.CodeGeneration/Services/DataService.CodeProject.cs b/src/OSharp.CodeGeneration/Services/DataService.CodeProject.cs index 2ba894d..c77e728 100644 --- a/src/OSharp.CodeGeneration/Services/DataService.CodeProject.cs +++ b/src/OSharp.CodeGeneration/Services/DataService.CodeProject.cs @@ -8,6 +8,7 @@ using OSharp.CodeGeneration.Services.Entities; using OSharp.Collections; using OSharp.Data; using OSharp.Extensions; +using OSharp.Json; namespace OSharp.CodeGeneration.Services @@ -30,6 +31,37 @@ namespace OSharp.CodeGeneration.Services return ProjectRepository.CheckExistsAsync(predicate, id); } + /// + /// 获取指定条件的项目信息 + /// + /// 检查谓语表达式 + /// 项目信息集合 + public CodeProject[] GetCodeProject(Expression> predicate) + { + CodeProject[] projects = ProjectRepository.Query(predicate).ToArray(); + string json = projects.ToJsonString(); + projects = json.FromJsonString(); + foreach (CodeProject project in projects) + { + foreach (CodeModule module in project.Modules) + { + foreach (CodeEntity entity in module.Entities) + { + foreach (CodeProperty property in entity.Properties) + { + property.Entity = entity; + } + + entity.Module = module; + } + + module.Project = project; + } + } + + return projects; + } + /// /// 添加项目信息信息 /// diff --git a/src/OSharp.CodeGeneration/Services/DataService.CodeSetting.cs b/src/OSharp.CodeGeneration/Services/DataService.CodeTemplate.cs similarity index 78% rename from src/OSharp.CodeGeneration/Services/DataService.CodeSetting.cs rename to src/OSharp.CodeGeneration/Services/DataService.CodeTemplate.cs index 62d09ee..e153b0b 100644 --- a/src/OSharp.CodeGeneration/Services/DataService.CodeSetting.cs +++ b/src/OSharp.CodeGeneration/Services/DataService.CodeTemplate.cs @@ -28,7 +28,7 @@ namespace OSharp.CodeGeneration.Services /// /// 获取 代码设置信息查询数据集 /// - public IQueryable CodeSettings => SettingRepository.QueryAsNoTracking(); + public IQueryable CodeTemplates => TemplateRepository.QueryAsNoTracking(); /// /// 检查代码设置信息信息是否存在 @@ -36,9 +36,9 @@ namespace OSharp.CodeGeneration.Services /// 检查谓语表达式 /// 更新的代码设置信息编号 /// 代码设置信息是否存在 - public Task CheckCodeSettingExists(Expression> predicate, Guid id = default) + public Task CheckCodeTemplateExists(Expression> predicate, Guid id = default) { - return SettingRepository.CheckExistsAsync(predicate, id); + return TemplateRepository.CheckExistsAsync(predicate, id); } /// @@ -46,14 +46,14 @@ namespace OSharp.CodeGeneration.Services /// /// 包含更新信息的代码设置信息 /// 业务操作结果 - public async Task UpdateCodeSettings(params CodeSetting[] entities) + public async Task UpdateCodeTemplates(params CodeTemplate[] entities) { List names = new List(); UnitOfWork.EnableTransaction(); foreach (var entity in entities) { entity.Validate(); - if (await CheckCodeSettingExists(m=>m.Name == entity.Name, entity.Id)) + if (await CheckCodeTemplateExists(m=>m.Name == entity.Name, entity.Id)) { return new OperationResult(OperationResultType.Error, $"名称为“{entity.Name}”的代码设置已存在"); } @@ -61,13 +61,13 @@ namespace OSharp.CodeGeneration.Services int count; if (entity.Id == default) { - count = await SettingRepository.InsertAsync(entity); + count = await TemplateRepository.InsertAsync(entity); } else { - CodeSetting entity1 = await SettingRepository.GetAsync(entity.Id); + CodeTemplate entity1 = await TemplateRepository.GetAsync(entity.Id); entity1 = entity.MapTo(entity1); - count = await SettingRepository.UpdateAsync(entity1); + count = await TemplateRepository.UpdateAsync(entity1); } if (count > 0) @@ -87,13 +87,13 @@ namespace OSharp.CodeGeneration.Services /// /// 要删除的代码设置信息编号 /// 业务操作结果 - public async Task DeleteCodeSettings(params Guid[] ids) + public async Task DeleteCodeTemplates(params Guid[] ids) { List names = new List(); UnitOfWork.EnableTransaction(); foreach (var id in ids) { - var entity = await SettingRepository.GetAsync(id); + var entity = await TemplateRepository.GetAsync(id); if (entity == null) { continue; @@ -104,7 +104,7 @@ namespace OSharp.CodeGeneration.Services throw new OsharpException($"代码设置“{entity.Name}”是系统设置,不能删除"); } - int count = await SettingRepository.DeleteAsync(entity); + int count = await TemplateRepository.DeleteAsync(entity); if (count > 0) { names.Add(entity.Name); diff --git a/src/OSharp.CodeGeneration/Services/DataService.cs b/src/OSharp.CodeGeneration/Services/DataService.cs index 4060cd8..43edae1 100644 --- a/src/OSharp.CodeGeneration/Services/DataService.cs +++ b/src/OSharp.CodeGeneration/Services/DataService.cs @@ -27,7 +27,7 @@ namespace OSharp.CodeGeneration.Services protected IRepository PropertyRepository => _serviceProvider.GetService>(); - protected IRepository SettingRepository => _serviceProvider.GetService>(); + protected IRepository TemplateRepository => _serviceProvider.GetService>(); protected IRepository ForeignRepository => _serviceProvider.GetService>(); } diff --git a/src/OSharp.CodeGeneration/Services/Entities/CodeEntity.cs b/src/OSharp.CodeGeneration/Services/Entities/CodeEntity.cs index 73692a9..2b884d9 100644 --- a/src/OSharp.CodeGeneration/Services/Entities/CodeEntity.cs +++ b/src/OSharp.CodeGeneration/Services/Entities/CodeEntity.cs @@ -119,5 +119,10 @@ namespace OSharp.CodeGeneration.Services.Entities /// 获取或设置 实体的属性集合 /// public virtual ICollection Properties { get; set; } = new List(); + + /// + /// 获取或设置 外键集合 + /// + public virtual ICollection Foreigns { get; set; } = new List(); } } diff --git a/src/OSharp.CodeGeneration/Services/Entities/CodeForeignConfiguration.cs b/src/OSharp.CodeGeneration/Services/Entities/CodeForeignConfiguration.cs index 0d63935..d0b10af 100644 --- a/src/OSharp.CodeGeneration/Services/Entities/CodeForeignConfiguration.cs +++ b/src/OSharp.CodeGeneration/Services/Entities/CodeForeignConfiguration.cs @@ -22,7 +22,7 @@ namespace OSharp.CodeGeneration.Services.Entities /// 实体类型创建器 public override void Configure(EntityTypeBuilder builder) { - + builder.HasOne(m => m.Entity).WithMany(n => n.Foreigns).HasForeignKey(m => m.EntityId).IsRequired(); } } } diff --git a/src/OSharp.CodeGeneration/Services/Entities/CodeProject.cs b/src/OSharp.CodeGeneration/Services/Entities/CodeProject.cs index 6af2f14..e3e7773 100644 --- a/src/OSharp.CodeGeneration/Services/Entities/CodeProject.cs +++ b/src/OSharp.CodeGeneration/Services/Entities/CodeProject.cs @@ -74,5 +74,9 @@ namespace OSharp.CodeGeneration.Services.Entities /// public virtual ICollection Modules { get; set; } = new List(); + /// + /// 获取或设置 项目模板集合 + /// + public virtual ICollection ProjectTemplates { get; set; } = new List(); } } diff --git a/src/OSharp.CodeGeneration/Services/Entities/CodeProjectTemplate.cs b/src/OSharp.CodeGeneration/Services/Entities/CodeProjectTemplate.cs new file mode 100644 index 0000000..740e18e --- /dev/null +++ b/src/OSharp.CodeGeneration/Services/Entities/CodeProjectTemplate.cs @@ -0,0 +1,49 @@ +// ----------------------------------------------------------------------- +// +// Copyright (c) 2014-2021 OSharp. All rights reserved. +// +// http://www.osharp.org +// 郭明锋 +// 2021-04-09 12:15 +// ----------------------------------------------------------------------- + +using System; +using System.ComponentModel; + +using OSharp.Entity; + + +namespace OSharp.CodeGeneration.Services.Entities +{ + /// + /// 实体类:项目模板配对 + /// + [Description("项目模板配对")] + [TableNamePrefix("CodeGen")] + public class CodeProjectTemplate : EntityBase, ILockable + { + /// 获取或设置 是否锁定当前信息 + public bool IsLocked { get; set; } + + /// + /// 获取或设置 项目编号 + /// + public Guid ProjectId { get; set; } + + /// + /// 获取或设置 项目信息 + /// + public virtual CodeProject Project { get; set; } + + /// + /// 获取或设置 模板编号 + /// + public Guid TemplateId { get; set; } + + /// + /// 获取或设置 模板信息 + /// + public virtual CodeTemplate Template { get; set; } + } + +} diff --git a/src/OSharp.CodeGeneration/Services/Entities/CodeProjectTemplateConfiguration.cs b/src/OSharp.CodeGeneration/Services/Entities/CodeProjectTemplateConfiguration.cs new file mode 100644 index 0000000..803bf05 --- /dev/null +++ b/src/OSharp.CodeGeneration/Services/Entities/CodeProjectTemplateConfiguration.cs @@ -0,0 +1,29 @@ +// ----------------------------------------------------------------------- +// +// Copyright (c) 2014-2021 OSharp. All rights reserved. +// +// http://www.osharp.org +// 郭明锋 +// 2021-04-09 13:08 +// ----------------------------------------------------------------------- + +using System; + +using Microsoft.EntityFrameworkCore.Metadata.Builders; + +using OSharp.Entity; + + +namespace OSharp.CodeGeneration.Services.Entities +{ + public class CodeProjectTemplateConfiguration : EntityTypeConfigurationBase + { + /// 重写以实现实体类型各个属性的数据库配置 + /// 实体类型创建器 + public override void Configure(EntityTypeBuilder builder) + { + builder.HasOne(m => m.Project).WithMany(n => n.ProjectTemplates).HasForeignKey(m => m.ProjectId).IsRequired(); + builder.HasOne(m => m.Template).WithMany(n => n.ProjectTemplates).HasForeignKey(m => m.TemplateId).IsRequired(); + } + } +} diff --git a/src/OSharp.CodeGeneration/Services/Entities/CodeProperty.cs b/src/OSharp.CodeGeneration/Services/Entities/CodeProperty.cs index 8937317..1f8397d 100644 --- a/src/OSharp.CodeGeneration/Services/Entities/CodeProperty.cs +++ b/src/OSharp.CodeGeneration/Services/Entities/CodeProperty.cs @@ -76,6 +76,11 @@ namespace OSharp.CodeGeneration.Services.Entities /// public bool IsNullable { get; set; } + /// + /// 获取或设置 是否只读 + /// + public bool IsReadonly { get; set; } + /// /// 获取或设置 是否虚属性 /// diff --git a/src/OSharp.CodeGeneration/Services/Entities/CodeSetting.cs b/src/OSharp.CodeGeneration/Services/Entities/CodeTemplate.cs similarity index 61% rename from src/OSharp.CodeGeneration/Services/Entities/CodeSetting.cs rename to src/OSharp.CodeGeneration/Services/Entities/CodeTemplate.cs index a070ca0..b8cd397 100644 --- a/src/OSharp.CodeGeneration/Services/Entities/CodeSetting.cs +++ b/src/OSharp.CodeGeneration/Services/Entities/CodeTemplate.cs @@ -8,10 +8,12 @@ // ----------------------------------------------------------------------- using System; +using System.Collections.Generic; using System.ComponentModel; using System.ComponentModel.DataAnnotations; using OSharp.CodeGeneration.Generates; +using OSharp.CodeGeneration.Templates; using OSharp.Entity; using OSharp.Extensions; @@ -19,11 +21,11 @@ using OSharp.Extensions; namespace OSharp.CodeGeneration.Services.Entities { /// - /// 实体类:代码设置 + /// 实体类:代码模板 /// - [Description("代码设置")] + [Description("代码模板")] [TableNamePrefix("CodeGen")] - public class CodeSetting : EntityBase, ILockable + public class CodeTemplate : EntityBase, ILockable { /// /// 获取或设置 配置名称 @@ -67,14 +69,51 @@ namespace OSharp.CodeGeneration.Services.Entities public bool IsLocked { get; set; } /// - /// 获取或设置 所属项目编号 + /// 获取或设置 项目模板集合 /// - public Guid? ProjectId { get; set; } + public virtual ICollection ProjectTemplates { get; set; } = new List(); - /// - /// 获取或设置 所属项目 - /// - public virtual CodeProject Project { get; set; } + public Type GetInnerTemplateType() + { + switch (Name) + { + case "cs_实体类": + return typeof(cs_Entity); + case "cs_输入DTO类": + return typeof(cs_InputDto); + case "cs_输出DTO类": + return typeof(cs_OutputDto); + case "cs_模块Pack类": + return typeof(cs_ServicePack); + case "cs_模块服务契约接口": + return typeof(cs_ServiceContract); + case "cs_模块服务综合实现基类": + return typeof(cs_ServiceMainImplBase); + case "cs_模块服务综合实现类": + return typeof(cs_ServiceMainImpl); + case "cs_模块服务实体实现基类": + return typeof(cs_ServiceEntityImplBase); + case "cs_实体数据映射配置类": + return typeof(cs_EntityConfiguration); + case "cs_实体管理控制器基类": + return typeof(cs_AdminControllerBase); + case "cs_实体管理控制器类": + return typeof(cs_AdminController); + case "ng_Alain模块": + return typeof(ng_AlainModule); + case "ng_Alain模块路由": + return typeof(ng_AlainRouting); + case "ng_Alain模块组件": + return typeof(ng_AlainComponent); + case "ng_Alain模块组件Html": + return typeof(ng_AlainComponentHtml); + case "ng_Alain其他数据": + return typeof(ng_AlainOther); + return null; + default: + return null; + } + } /// /// 获取项目代码输出文件名 diff --git a/src/OSharp.CodeGeneration/Services/Entities/CodeSettingConfiguration.cs b/src/OSharp.CodeGeneration/Services/Entities/CodeTemplateConfiguration.cs similarity index 73% rename from src/OSharp.CodeGeneration/Services/Entities/CodeSettingConfiguration.cs rename to src/OSharp.CodeGeneration/Services/Entities/CodeTemplateConfiguration.cs index 3b39a37..b9db2ab 100644 --- a/src/OSharp.CodeGeneration/Services/Entities/CodeSettingConfiguration.cs +++ b/src/OSharp.CodeGeneration/Services/Entities/CodeTemplateConfiguration.cs @@ -16,13 +16,11 @@ using OSharp.Entity; namespace OSharp.CodeGeneration.Services.Entities { - public class CodeSettingConfiguration : EntityTypeConfigurationBase + public class CodeTemplateConfiguration : EntityTypeConfigurationBase { /// 重写以实现实体类型各个属性的数据库配置 /// 实体类型创建器 - public override void Configure(EntityTypeBuilder builder) - { - builder.HasOne(m => m.Project).WithMany().IsRequired(false); - } + public override void Configure(EntityTypeBuilder builder) + { } } } diff --git a/src/OSharp.CodeGeneration/Services/IDataContract.cs b/src/OSharp.CodeGeneration/Services/IDataContract.cs index 4568028..d6499ac 100644 --- a/src/OSharp.CodeGeneration/Services/IDataContract.cs +++ b/src/OSharp.CodeGeneration/Services/IDataContract.cs @@ -38,6 +38,13 @@ namespace OSharp.CodeGeneration.Services /// 项目信息是否存在 Task CheckCodeProjectExists(Expression> predicate, Guid id = default); + /// + /// 获取指定条件的项目信息 + /// + /// 检查谓语表达式 + /// 项目信息集合 + CodeProject[] GetCodeProject(Expression>predicate); + /// /// 添加项目信息信息 /// @@ -191,36 +198,35 @@ namespace OSharp.CodeGeneration.Services Task DeleteCodeForeigns(params Guid[] ids); #endregion - - - #region 代码设置信息业务 + + #region 代码模板信息业务 /// - /// 获取 代码设置信息查询数据集 + /// 获取 代码模板信息查询数据集 /// - IQueryable CodeSettings { get; } + IQueryable CodeTemplates { get; } /// - /// 检查代码设置信息信息是否存在 + /// 检查代码模板信息信息是否存在 /// /// 检查谓语表达式 - /// 更新的代码设置信息编号 - /// 代码设置信息是否存在 - Task CheckCodeSettingExists(Expression> predicate, Guid id = default); + /// 更新的代码模板信息编号 + /// 代码模板信息是否存在 + Task CheckCodeTemplateExists(Expression> predicate, Guid id = default); /// - /// 更新代码设置信息信息 + /// 更新代码模板信息信息 /// - /// 包含更新信息的代码设置信息 + /// 包含更新信息的代码模板信息 /// 业务操作结果 - Task UpdateCodeSettings(params CodeSetting[] settings); + Task UpdateCodeTemplates(params CodeTemplate[] settings); /// - /// 删除代码设置信息信息 + /// 删除代码模板信息信息 /// - /// 要删除的代码设置信息编号 + /// 要删除的代码模板信息编号 /// 业务操作结果 - Task DeleteCodeSettings(params Guid[] ids); + Task DeleteCodeTemplates(params Guid[] ids); #endregion diff --git a/src/OSharp.CodeGeneration/Services/Seeds/CodeEntitySeedDataInitializer.cs b/src/OSharp.CodeGeneration/Services/Seeds/CodeEntitySeedDataInitializer.cs new file mode 100644 index 0000000..fd0bdff --- /dev/null +++ b/src/OSharp.CodeGeneration/Services/Seeds/CodeEntitySeedDataInitializer.cs @@ -0,0 +1,74 @@ +// ----------------------------------------------------------------------- +// +// Copyright (c) 2014-2021 OSharp. All rights reserved. +// +// http://www.osharp.org +// 郭明锋 +// 2021-04-09 17:14 +// ----------------------------------------------------------------------- + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; + +using Microsoft.Extensions.DependencyInjection; + +using OSharp.CodeGeneration.Services.Entities; +using OSharp.Entity; + + +namespace OSharp.CodeGeneration.Services.Seeds +{ + public class CodeEntitySeedDataInitializer : SeedDataInitializerBase + { + /// + /// 初始化一个类型的新实例 + /// + public CodeEntitySeedDataInitializer(IServiceProvider rootProvider) + : base(rootProvider) + { } + + /// 获取 种子数据初始化的顺序 + public override int Order => 3; + + /// 重写以提供要初始化的种子数据 + /// + protected override CodeEntity[] SeedData(IServiceProvider provider) + { + IRepository repository = provider.GetRequiredService>(); + CodeModule module = repository.GetFirst(m => m.Name == "Identity"); + List entities = new List() + { + new CodeEntity(){Name = "User", Display = "用户", PrimaryKeyTypeFullName = "System.Int32", ModuleId = module.Id}, + new CodeEntity(){Name = "Role", Display = "角色", PrimaryKeyTypeFullName = "System.Int32", ModuleId = module.Id}, + new CodeEntity(){Name = "UserRole", Display = "用户角色", PrimaryKeyTypeFullName = "System.Int32", ModuleId = module.Id}, + }; + + module = repository.GetFirst(m => m.Name == "Auth"); + entities.AddRange(new List() + { + new CodeEntity(){Name = "Module", Display = "模块", PrimaryKeyTypeFullName = "System.Int32", ModuleId = module.Id}, + new CodeEntity(){Name = "Function", Display = "功能", PrimaryKeyTypeFullName = "System.Guid", ModuleId = module.Id}, + new CodeEntity(){Name = "EntityInfo", Display = "实体", PrimaryKeyTypeFullName = "System.Guid", ModuleId = module.Id}, + }); + + module = repository.GetFirst(m => m.Name == "Infos"); + entities.AddRange(new List() + { + new CodeEntity(){Name = "Article", Display = "文章", PrimaryKeyTypeFullName = "System.Int32", ModuleId = module.Id}, + new CodeEntity(){Name = "Message", Display = "站内信", PrimaryKeyTypeFullName = "System.Guid", ModuleId = module.Id} + }); + + return entities.ToArray(); + } + + /// 重写以提供判断某个实体是否存在的表达式 + /// 要判断的实体 + /// + protected override Expression> ExistingExpression(CodeEntity entity) + { + return m => m.Name == entity.Name && m.ModuleId == entity.ModuleId; + } + } +} diff --git a/src/OSharp.CodeGeneration/Services/Seeds/CodeModuleSeedDataInitializer.cs b/src/OSharp.CodeGeneration/Services/Seeds/CodeModuleSeedDataInitializer.cs new file mode 100644 index 0000000..824376d --- /dev/null +++ b/src/OSharp.CodeGeneration/Services/Seeds/CodeModuleSeedDataInitializer.cs @@ -0,0 +1,56 @@ +// ----------------------------------------------------------------------- +// +// Copyright (c) 2014-2021 OSharp. All rights reserved. +// +// http://www.osharp.org +// 郭明锋 +// 2021-04-09 17:01 +// ----------------------------------------------------------------------- + +using System; +using System.Linq; +using System.Linq.Expressions; + +using Microsoft.Extensions.DependencyInjection; + +using OSharp.CodeGeneration.Services.Entities; +using OSharp.Entity; + + +namespace OSharp.CodeGeneration.Services.Seeds +{ + public class CodeModuleSeedDataInitializer : SeedDataInitializerBase + { + /// + /// 初始化一个类型的新实例 + /// + public CodeModuleSeedDataInitializer(IServiceProvider rootProvider) + : base(rootProvider) + { } + + /// 获取 种子数据初始化的顺序 + public override int Order => 2; + + /// 重写以提供要初始化的种子数据 + /// + protected override CodeModule[] SeedData(IServiceProvider provider) + { + IRepository repository = provider.GetRequiredService>(); + CodeProject project = repository.GetFirst(m => m.Name == "示例项目"); + return new[] + { + new CodeModule(){Name = "Identity", Display = "身份认证", ProjectId = project.Id}, + new CodeModule(){Name = "Auth", Display = "权限授权", ProjectId = project.Id}, + new CodeModule(){Name = "Infos", Display = "信息", ProjectId = project.Id}, + }; + } + + /// 重写以提供判断某个实体是否存在的表达式 + /// 要判断的实体 + /// + protected override Expression> ExistingExpression(CodeModule entity) + { + return m => m.Name == entity.Name && m.ProjectId == entity.ProjectId; + } + } +} diff --git a/src/OSharp.CodeGeneration/Services/Seeds/CodeProjectSeedDataInitializer.cs b/src/OSharp.CodeGeneration/Services/Seeds/CodeProjectSeedDataInitializer.cs new file mode 100644 index 0000000..b29e7d9 --- /dev/null +++ b/src/OSharp.CodeGeneration/Services/Seeds/CodeProjectSeedDataInitializer.cs @@ -0,0 +1,52 @@ +// ----------------------------------------------------------------------- +// +// Copyright (c) 2014-2021 OSharp. All rights reserved. +// +// http://www.osharp.org +// 郭明锋 +// 2021-04-09 16:56 +// ----------------------------------------------------------------------- + +using System; +using System.Linq.Expressions; + +using OSharp.CodeGeneration.Services.Entities; +using OSharp.Entity; + + +namespace OSharp.CodeGeneration.Services.Seeds +{ + public class CodeProjectSeedDataInitializer : SeedDataInitializerBase + { + /// + /// 初始化一个类型的新实例 + /// + public CodeProjectSeedDataInitializer(IServiceProvider rootProvider) + : base(rootProvider) + { } + + /// 获取 种子数据初始化的顺序 + public override int Order => 1; + + /// 重写以提供要初始化的种子数据 + /// + protected override CodeProject[] SeedData(IServiceProvider provider) + { + return new[] + { + new CodeProject() + { + Name = "示例项目", NamespacePrefix = "Liuliu.Demo", Company = "LiuliuSoft", SiteUrl = "https://www.osharp.org", Creator = "郭明锋", Copyright = "OSHARP.ORG@2021" + } + }; + } + + /// 重写以提供判断某个实体是否存在的表达式 + /// 要判断的实体 + /// + protected override Expression> ExistingExpression(CodeProject entity) + { + return m => m.Name == entity.Name; + } + } +} diff --git a/src/OSharp.CodeGeneration/Services/Seeds/CodePropertySeedDataInitializer.cs b/src/OSharp.CodeGeneration/Services/Seeds/CodePropertySeedDataInitializer.cs new file mode 100644 index 0000000..70b9531 --- /dev/null +++ b/src/OSharp.CodeGeneration/Services/Seeds/CodePropertySeedDataInitializer.cs @@ -0,0 +1,61 @@ +// ----------------------------------------------------------------------- +// +// Copyright (c) 2014-2021 OSharp. All rights reserved. +// +// http://www.osharp.org +// 郭明锋 +// 2021-04-09 18:09 +// ----------------------------------------------------------------------- + +using System; +using System.Collections.Generic; +using System.Linq.Expressions; + +using Microsoft.Extensions.DependencyInjection; + +using OSharp.CodeGeneration.Services.Entities; +using OSharp.Entity; + + +namespace OSharp.CodeGeneration.Services.Seeds +{ + public class CodePropertySeedDataInitializer : SeedDataInitializerBase + { + /// + /// 初始化一个类型的新实例 + /// + public CodePropertySeedDataInitializer(IServiceProvider rootProvider) + : base(rootProvider) + { } + + /// 获取 种子数据初始化的顺序 + public override int Order => 4; + + /// 重写以提供要初始化的种子数据 + /// + protected override CodeProperty[] SeedData(IServiceProvider provider) + { + IRepository repository = provider.GetRequiredService>(); + CodeEntity entity = repository.GetFirst(m => m.Name == "User"); + List properties = new List() + { + new CodeProperty(){Name = "UserName", Display = "用户名", TypeName = "System.String", IsRequired = true, MaxLength = 200, EntityId = entity.Id}, + new CodeProperty(){Name = "NickName", Display = "用户昵称", TypeName = "System.String", IsRequired = true, MaxLength = 200, EntityId = entity.Id}, + new CodeProperty(){Name = "Email", Display = "邮箱", TypeName = "System.String", MaxLength = 200, EntityId = entity.Id}, + new CodeProperty(){Name = "EmailConfirmed", Display = "邮箱确认", TypeName = "System.Boolean", EntityId = entity.Id}, + new CodeProperty(){Name = "PhoneNumber", Display = "手机号", TypeName = "System.String", MaxLength = 50, EntityId = entity.Id}, + new CodeProperty(){Name = "PhoneNumberConfirmed", Display = "手机号确认", TypeName = "System.Boolean", EntityId = entity.Id}, + }; + + return properties.ToArray(); + } + + /// 重写以提供判断某个实体是否存在的表达式 + /// 要判断的实体 + /// + protected override Expression> ExistingExpression(CodeProperty entity) + { + return m => m.Name == entity.Name && m.EntityId == entity.EntityId; + } + } +} diff --git a/src/OSharp.CodeGeneration/Services/Seeds/CodeTemplateSeedDataInitializer.cs b/src/OSharp.CodeGeneration/Services/Seeds/CodeTemplateSeedDataInitializer.cs new file mode 100644 index 0000000..abf41e2 --- /dev/null +++ b/src/OSharp.CodeGeneration/Services/Seeds/CodeTemplateSeedDataInitializer.cs @@ -0,0 +1,65 @@ +// ----------------------------------------------------------------------- +// +// Copyright (c) 2014-2021 OSharp. All rights reserved. +// +// http://www.osharp.org +// 郭明锋 +// 2021-04-09 16:02 +// ----------------------------------------------------------------------- + +using System; +using System.Linq.Expressions; + +using OSharp.CodeGeneration.Generates; +using OSharp.CodeGeneration.Services.Entities; +using OSharp.Entity; + + +namespace OSharp.CodeGeneration.Services.Seeds +{ + public class CodeTemplateSeedDataInitializer : SeedDataInitializerBase + { + /// + /// 初始化一个类型的新实例 + /// + public CodeTemplateSeedDataInitializer(IServiceProvider rootProvider) + : base(rootProvider) + { } + + /// 获取 种子数据初始化的顺序 + public override int Order => 1; + + /// 重写以提供要初始化的种子数据 + /// + protected override CodeTemplate[] SeedData(IServiceProvider provider) + { + return new[] + { + new CodeTemplate(){Name = "cs_实体类", MetadataType = MetadataType.Entity, TemplateFile = "内置", Order = 1, IsSystem = true, OutputFileFormat = "{Project.NamespacePrefix}.Core/{Module.Name}/Entities/{Entity.Name}.generated.cs"}, + new CodeTemplate(){Name = "cs_输入DTO类", MetadataType = MetadataType.Entity, TemplateFile = "内置", Order = 2, IsSystem = true, OutputFileFormat = "{Project.NamespacePrefix}.Core/{Module.Name}/Dtos/{Entity.Name}InputDto.generated.cs"}, + new CodeTemplate(){Name = "cs_输出DTO类", MetadataType = MetadataType.Entity, TemplateFile = "内置", Order = 3, IsSystem = true, OutputFileFormat = "{Project.NamespacePrefix}.Core/{Module.Name}/Dtos/{Entity.Name}OutputDto.generated.cs"}, + new CodeTemplate(){Name = "cs_模块Pack类", MetadataType = MetadataType.Module, TemplateFile = "内置", Order = 4, IsSystem = true, IsOnce = true, OutputFileFormat = "{Project.NamespacePrefix}.Core/{Module.Name}/{Module.Name}Pack.cs"}, + new CodeTemplate(){Name = "cs_模块服务契约接口", MetadataType = MetadataType.Module, TemplateFile = "内置", Order = 5, IsSystem = true, OutputFileFormat = "{Project.NamespacePrefix}.Core/{Module.Name}/I{Module.Name}Contract.generated.cs"}, + new CodeTemplate(){Name = "cs_模块服务综合实现基类", MetadataType = MetadataType.Module, TemplateFile = "内置", Order = 6, IsSystem = true, OutputFileFormat = "{Project.NamespacePrefix}.Core/{Module.Name}/{Module.Name}ServiceBase.generated.cs"}, + new CodeTemplate(){Name = "cs_模块服务综合实现类", MetadataType = MetadataType.Module, TemplateFile = "内置", Order = 7, IsSystem = true, IsOnce = true, OutputFileFormat = "{Project.NamespacePrefix}.Core/{Module.Name}/{Module.Name}Service.cs"}, + new CodeTemplate(){Name = "cs_模块服务实体实现基类", MetadataType = MetadataType.Entity, TemplateFile = "内置", Order = 8, IsSystem = true, OutputFileFormat = "{Project.NamespacePrefix}.Core/{Module.Name}/{Module.Name}ServiceBase.{Entity.Name}.generated.cs"}, + new CodeTemplate(){Name = "cs_实体数据映射配置类", MetadataType = MetadataType.Entity, TemplateFile = "内置", Order = 9, IsSystem = true, OutputFileFormat = "{Project.NamespacePrefix}.EntityConfiguration/{Module.Name}/{Entity.Name}Configuration.generated.cs"}, + new CodeTemplate(){Name = "cs_实体管理控制器基类", MetadataType = MetadataType.Entity, TemplateFile = "内置", Order = 10, IsSystem = true, OutputFileFormat = "{Project.NamespacePrefix}.Web/Areas/Admin/Controllers/{Module.Name}/{Entity.Name}ControllerBase.generated.cs"}, + new CodeTemplate(){Name = "cs_实体管理控制器类", MetadataType = MetadataType.Entity, TemplateFile = "内置", Order = 11, IsSystem = true, IsOnce = true, OutputFileFormat = "{Project.NamespacePrefix}.Web/Areas/Admin/Controllers/{Module.Name}/{Entity.Name}Controller.cs"}, + new CodeTemplate(){Name = "ng_Alain模块", MetadataType = MetadataType.Module, TemplateFile = "内置", Order = 12, IsSystem = true, IsOnce = true, OutputFileFormat = "ui/ng-alain/src/app/routes/{Module.Name:Lower}/{Module.Name:Lower}.module.ts"}, + new CodeTemplate(){Name = "ng_Alain模块路由", MetadataType = MetadataType.Module, TemplateFile = "内置", Order = 13, IsSystem = true, IsOnce = true, OutputFileFormat = "ui/ng-alain/src/app/routes/{Module.Name:Lower}/{Module.Name:Lower}.routing.ts"}, + new CodeTemplate(){Name = "ng_Alain模块组件", MetadataType = MetadataType.Entity, TemplateFile = "内置", Order = 14, IsSystem = true, IsOnce = true, OutputFileFormat = "ui/ng-alain/src/app/routes/{Module.Name:Lower}/{Entity.Name:Lower}/{Entity.Name:Lower}.component.ts"}, + new CodeTemplate(){Name = "ng_Alain模块组件Html", MetadataType = MetadataType.Entity, TemplateFile = "内置", Order = 15, IsSystem = true, IsOnce = true, OutputFileFormat = "ui/ng-alain/src/app/routes/{Module.Name:Lower}/{Entity.Name:Lower}/{Entity.Name:Lower}.component.html"}, + new CodeTemplate(){Name = "ng_Alain其他数据", MetadataType = MetadataType.Project, TemplateFile = "内置", Order = 15, IsSystem = true, OutputFileFormat = "ui/ng-alain/src/assets/osharp/other.generated"}, + }; + } + + /// 重写以提供判断某个实体是否存在的表达式 + /// 要判断的实体 + /// + protected override Expression> ExistingExpression(CodeTemplate entity) + { + return m => m.Name == entity.Name; + } + } +} diff --git a/src/OSharp.CodeGeneration/Templates/TestTemplate.cshtml b/src/OSharp.CodeGeneration/Templates/TestTemplate.cshtml deleted file mode 100644 index b7d8046..0000000 --- a/src/OSharp.CodeGeneration/Templates/TestTemplate.cshtml +++ /dev/null @@ -1,17 +0,0 @@ -@inherits TemplateBase -@namespace OSharp.CodeGeneration.Templates - -@using System -@using System.Threading.Tasks -@using Microsoft.AspNetCore.Razor.Language.Intermediate -@using Microsoft.EntityFrameworkCore -@using MiniRazor -@using OSharp.Extensions; -@using OSharp.CodeGeneration.Services.Entities -@{ CodeModule module = Model; } -namespace @(module.Namespace) -{ - public particl interface I@(module.Name)Contract - { - } -} diff --git a/src/OSharp.CodeGeneration/Templates/cs_AdminController.cshtml b/src/OSharp.CodeGeneration/Templates/cs_AdminController.cshtml new file mode 100644 index 0000000..0cc5844 --- /dev/null +++ b/src/OSharp.CodeGeneration/Templates/cs_AdminController.cshtml @@ -0,0 +1,46 @@ +@inherits MiniRazor.TemplateBase +@namespace OSharp.CodeGeneration.Templates +@using System; +@using OSharp.CodeGeneration.Services.Entities +@using OSharp.CodeGeneration.Utils +@using OSharp.Collections; +@using OSharp.Exceptions; +@using OSharp.Extensions; +@{ + CodeEntity entity = Model; + string keyType = TypeHelper.ToSingleTypeName(entity.PrimaryKeyTypeFullName); +}// ----------------------------------------------------------------------- +// +// 这个文件只生成一次,再次生成不会被覆盖。 +// 可以在此类进行继承重写来扩展基类 @(entity.Name)ControllerBase +// +// +// +// @entity.Module.Project.Copyright +// +// @entity.Module.Project.SiteUrl +// @entity.Module.Project.Creator +// ----------------------------------------------------------------------- + +using System; + +using OSharp.Filter; + +using @(entity.Module.Namespace); + + +namespace @(entity.Module.Project.NamespacePrefix).Web.Areas.Admin.Controllers +{ + /// + /// 管理控制器: @(entity.Display)信息 + /// + public class @(entity.Name)Controller : @(entity.Name)ControllerBase + { + /// + /// 初始化一个类型的新实例 + /// + public @(entity.Name)Controller(IServiceProvider provider) + : base(provider) + { } + } +} diff --git a/src/OSharp.CodeGeneration/Templates/cs_AdminControllerBase.cshtml b/src/OSharp.CodeGeneration/Templates/cs_AdminControllerBase.cshtml new file mode 100644 index 0000000..3fe8419 --- /dev/null +++ b/src/OSharp.CodeGeneration/Templates/cs_AdminControllerBase.cshtml @@ -0,0 +1,170 @@ +@inherits MiniRazor.TemplateBase +@namespace OSharp.CodeGeneration.Templates +@using System; +@using System.Collections.Generic; +@using System.Linq; +@using OSharp.CodeGeneration.Services.Entities +@using OSharp.CodeGeneration.Utils +@using OSharp.Collections; +@using OSharp.Exceptions; +@using OSharp.Extensions; +@{ + CodeEntity entity = Model; + string keyType = TypeHelper.ToSingleTypeName(entity.PrimaryKeyTypeFullName); +}// ----------------------------------------------------------------------- +// +// 此代码由代码生成器生成。 +// 手动更改此文件可能导致应用程序出现意外的行为。 +// 如果重新生成代码,对此文件的任何修改都会丢失。 +// 如果需要扩展此类,可以遵守如下规则进行扩展: +// 1.横向扩展:如需给当前控制器添加API,请在控制器类型 @(entity.Name)Controller.cs 进行添加 +// 2.纵向扩展:如需要重写当前控制器的API实现,请在控制器类型 @(entity.Name)Controller.cs 进行继承重写 +// +// +// +// @entity.Module.Project.Copyright +// +// @entity.Module.Project.SiteUrl +// @entity.Module.Project.Creator +// ----------------------------------------------------------------------- + +using System; +using System.ComponentModel; +using System.Linq; +using System.Linq.Expressions; +using System.Threading.Tasks; + +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.DependencyInjection; + +using OSharp.AspNetCore.Mvc; +using OSharp.AspNetCore.Mvc.Filters; +using OSharp.AspNetCore.UI; +using OSharp.Caching; +using OSharp.Authorization.Functions; +using OSharp.Authorization.Modules; +using OSharp.Data; +using OSharp.Entity; +using OSharp.Filter; +using OSharp.Security; + +using @(entity.Module.Namespace); +using @(entity.Module.Namespace).Dtos; +using @(entity.Module.Namespace).Entities; + + +namespace @(entity.Module.Project.NamespacePrefix).Web.Areas.Admin.Controllers +{ + /// + /// 管理控制器基类: @(entity.Display)信息 + /// + [ModuleInfo(Position = "@(entity.Module.Name)", PositionName = "@(entity.Module.Display)模块")] + [Description("管理-@(entity.Display)信息")] + public abstract class @(entity.Name)ControllerBase : AdminApiController + { + private readonly IServiceProvider _provider; + + /// <summary> + /// 初始化一个<see cref="@(entity.Name)Controller"/>类型的新实例 + /// </summary> + protected @(entity.Name)ControllerBase(IServiceProvider provider) + { + _provider = provider; + } + + /// + /// 获取或设置 数据过滤服务对象 + /// + protected IFilterService FilterService => _provider.GetRequiredService<IFilterService>(); + + /// + /// 获取或设置 @(entity.Module.Display)模块业务契约对象 + /// + protected I@(entity.Module.Name)Contract @(entity.Module.Name)Contract => _provider.GetRequiredService<I@(entity.Module.Name)Contract>(); +@if (entity.Listable) +{ + + /// <summary> + /// 读取@(entity.Display)列表信息 + /// </summary> + /// <param name="request">页请求信息</param> + /// <returns>JSON操作结果</returns> + [HttpPost] + [ModuleInfo] + [Description("读取")] + public virtual AjaxResult Read(PageRequest request) + { + Check.NotNull(request, nameof(request)); + + Expression<Func<@(entity.Name), bool>> predicate = FilterService.GetExpression<@(entity.Name)>(request.FilterGroup); + var page = @(entity.Module.Name)Contract.@(entity.Name.ToPlural()).ToPage<@(entity.Name), @(entity.Name)OutputDto>(predicate, request.PageCondition); + + return new AjaxResult("success", AjaxResultType.Success, page.ToPageData()); + } + +} +@if (entity.Addable) +{ + + /// <summary> + /// 新增@(entity.Display)信息 + /// </summary> + /// <param name="dtos">@(entity.Display)信息输入DTO</param> + /// <returns>JSON操作结果</returns> + [HttpPost] + [ModuleInfo] + [DependOnFunction(nameof(Read))] + [UnitOfWork] + [Description("新增")] + public virtual async Task<AjaxResult> Create(@(entity.Name)InputDto[] dtos) + { + Check.NotNull(dtos, nameof(dtos)); + OperationResult result = await @(entity.Module.Name)Contract.Create@(entity.Name.ToPlural())(dtos); + return result.ToAjaxResult(); + } + +} +@if (entity.Updatable) +{ + + /// <summary> + /// 更新@(entity.Display)信息 + /// </summary> + /// <param name="dtos">@(entity.Display)信息输入DTO</param> + /// <returns>JSON操作结果</returns> + [HttpPost] + [ModuleInfo] + [DependOnFunction(nameof(Read))] + [UnitOfWork] + [Description("更新")] + public virtual async Task<AjaxResult> Update(@(entity.Name)InputDto[] dtos) + { + Check.NotNull(dtos, nameof(dtos)); + OperationResult result = await @(entity.Module.Name)Contract.Update@(entity.Name.ToPlural())(dtos); + return result.ToAjaxResult(); + } + +} +@if (entity.Deletable) +{ + + /// <summary> + /// 删除@(entity.Display)信息 + /// </summary> + /// <param name="ids">@(entity.Display)信息编号</param> + /// <returns>JSON操作结果</returns> + [HttpPost] + [ModuleInfo] + [DependOnFunction(nameof(Read))] + [UnitOfWork] + [Description("删除")] + public virtual async Task<AjaxResult> Delete(@(keyType)[] ids) + { + Check.NotNull(ids, nameof(ids)); + OperationResult result = await @(entity.Module.Name)Contract.Delete@(entity.Name.ToPlural())(ids); + return result.ToAjaxResult(); + } + +} + } +} diff --git a/src/OSharp.CodeGeneration/Templates/cs_Entity.cshtml b/src/OSharp.CodeGeneration/Templates/cs_Entity.cshtml new file mode 100644 index 0000000..a10a433 --- /dev/null +++ b/src/OSharp.CodeGeneration/Templates/cs_Entity.cshtml @@ -0,0 +1,147 @@ +@inherits MiniRazor.TemplateBase +@namespace OSharp.CodeGeneration.Templates +@using System; +@using System.Collections.Generic; +@using System.Linq; +@using OSharp.CodeGeneration.Services.Entities +@using OSharp.CodeGeneration.Utils +@using OSharp.Collections; +@using OSharp.Exceptions; +@using OSharp.Extensions; +@{ + CodeEntity entity = Model; + string keyType = TypeHelper.ToSingleTypeName(entity.PrimaryKeyTypeFullName); + List addNamespaces = entity.Properties.Where(m => m.RelateEntity != null).Select(m => TypeHelper.GetNamespace(m.RelateEntity)) + .Union(entity.Properties.Where(m => m.TypeName.Contains(".") && !m.TypeName.StartsWith("System.")).Select(m => TypeHelper.GetNamespace(m.TypeName))) + .Distinct().Where(m => m != entity.Module.Namespace + ".Entities").ToList(); +}//------------------------------------------------------------------------------ +// +// 此代码由代码生成器生成。 +// 手动更改此文件可能导致应用程序出现意外的行为。 +// 如果重新生成代码,对此文件的任何修改都会丢失。 +// 如果需要扩展此类:可遵守如下规则进行扩展: +// 1.横向扩展:如需添加额外的属性,可新建文件“@(entity.Name).cs”的分部类“public partial class @(entity.Name)”}添加属性 +// +// +// +// @entity.Module.Project.Copyright +// +// @entity.Module.Project.SiteUrl +// @entity.Module.Project.Creator +// ----------------------------------------------------------------------- + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.ComponentModel.DataAnnotations; + +using OSharp.Entity; + +@foreach (var space in addNamespaces) +{ +using @(space); +} + +namespace @(entity.Module.Namespace).Entities +{ + /// <summary> + /// 实体类:@(entity.Display)信息 + /// </summary> + [Description("@(entity.Display)信息")] + [TableNamePrefix("@(entity.Module.Name)")] + public partial class @entity.Name : @(GetInterfaces(entity, keyType)) + { +@foreach (var prop in entity.Properties.OrderBy(m => m.IsForeignKey || m.IsNavigation)) +{ + /// <summary> + /// 获取或设置 @prop.Display + /// </summary> + [@GetAttributes(prop)] + public @GetProperty(prop) + + +} + } +} + +@functions +{ + + static string GetInterfaces(CodeEntity entity, string keyType) + { + List list = new List(); + + list.Add(string.Format("EntityBase<{0}>", keyType)); + list.AddIf("ILockable", entity.HasLocked); + list.AddIf("ISoftDeletable", entity.HasSoftDeleted); + list.AddIf("ICreationAudited", entity.HasCreationAudited); + list.AddIf("ICreatedTime", !entity.HasCreationAudited && entity.HasCreatedTime); + list.AddIf("IUpdateAudited", entity.HasUpdateAudited); + + return list.ExpandAndToString(", "); + } + + static string GetAttributes(CodeProperty prop) + { + Listlist = new List(); + list.Add(string.Format("DisplayName(\"{0}\")", prop.Display)); + if (prop.TypeName == "System.String") + { + if (prop.IsRequired != null && prop.IsRequired.Value) + { + list.Add("Required"); + } + if (prop.MaxLength > 0) + { + string min = prop.MinLength > -1 ? string.Format(", MinimumLength = {0}", prop.MinLength.Value) : ""; + list.Add(string.Format("StringLength({0}{1})", prop.MaxLength.Value, min)); + } + } + if (!string.IsNullOrEmpty(prop.DataAuthFlag)) + { + list.Add(prop.DataAuthFlag); + } + + return list.ExpandAndToString(", "); + } + + static string GetProperty(CodeProperty prop) + { + string propName = "{0}.{1}.{2}".FormatWith(prop.Entity.Module.Name, prop.Entity.Name, prop.Name); + Listlist = new List(); + + //导航属性,添加virtual + if (prop.IsNavigation) + { + list.Add("virtual"); + } + + //属性类型 + string propType = TypeHelper.ToSingleTypeName(prop.TypeName); + if (propType == "ICollection<>") + { + if (prop.RelateEntity.IsNullOrEmpty()) + { + throw new OsharpException("属性“{0}”类型为“ICollection<>”的导航属性,关联实体不能为空".FormatWith(propName)); + } + propType = string.Format("ICollection<{0}>".FormatWith(TypeHelper.ToSingleTypeName(prop.RelateEntity))); + } + //可空的值类型,添加?符号 + Type tmpType = Type.GetType(prop.TypeName); + if (prop.IsNullable && tmpType != null && tmpType.IsValueType) + { + propType += "?"; + } + list.Add(propType); + list.Add(prop.Name); + list.Add("{ get; set; }"); + + if (propType == "ICollection<>") + { + list.Add(string.Format("= new List<{0}>();", TypeHelper.ToSingleTypeName(prop.RelateEntity))); + } + + return list.ExpandAndToString(" "); + } + +} diff --git a/src/OSharp.CodeGeneration/Templates/cs_EntityConfiguration.cshtml b/src/OSharp.CodeGeneration/Templates/cs_EntityConfiguration.cshtml new file mode 100644 index 0000000..e3f2d07 --- /dev/null +++ b/src/OSharp.CodeGeneration/Templates/cs_EntityConfiguration.cshtml @@ -0,0 +1,172 @@ +@inherits MiniRazor.TemplateBase +@namespace OSharp.CodeGeneration.Templates +@using System; +@using System.Collections.Generic +@using System.Linq +@using OSharp.CodeGeneration.Services.Entities +@using OSharp.CodeGeneration.Utils +@using OSharp.Collections; +@using OSharp.Exceptions; +@using OSharp.Extensions; +@{ + CodeEntity entity = Model; + string keyType = TypeHelper.ToSingleTypeName(entity.PrimaryKeyTypeFullName); + string[] spaces = entity.Properties.Where(m => m.RelateEntity != null).Select(m => TypeHelper.GetNamespace(m.RelateEntity)) + .Distinct().Where(m => m != entity.Module.Namespace + ".Entities").ToArray(); +}//------------------------------------------------------------------------------ +// +// 此代码由代码生成器生成。 +// 手动更改此文件可能导致应用程序出现意外的行为。 +// 如果重新生成代码,对此文件的任何修改都会丢失。 +// 如果需要扩展此类:可遵守如下规则进行扩展: +// 1.横向扩展:如需添加额外的映射,可新建文件“@(entity.Name)Configuration.cs”的分部类“public partial class @(entity.Name)Configuration”}实现分部方法 EntityConfigurationAppend 进行扩展 +// +// +// +// @entity.Module.Project.Copyright +// +// @entity.Module.Project.SiteUrl +// @entity.Module.Project.Creator +// ----------------------------------------------------------------------- + +using System; +using System.Collections.Generic; + +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; + +using OSharp.Entity; + +using @(entity.Module.Namespace).Entities; +@foreach (var space in spaces) +{ +using @(space); +} + + +namespace @(entity.Module.Project.NamespacePrefix).EntityConfiguration.@entity.Module.Name +{ + /// <summary> + /// 实体配置类:@(entity.Display)信息 + /// </summary> + public partial class @(entity.Name)Configuration : EntityTypeConfigurationBase<@(entity.Name), @(keyType)> + { + /// <summary> + /// 重写以实现实体类型各个属性的数据库配置 + /// </summary> + /// <param name="builder">实体类型创建器</param> + public override void Configure(EntityTypeBuilder<@entity.Name> builder) + { +@foreach (var foreign in entity.Foreigns) +{ + @GetForeign(foreign, entity) +} + + EntityConfigurationAppend(builder); + } + + /// + /// 额外的数据映射 + /// + partial void EntityConfigurationAppend(EntityTypeBuilder<@entity.Name> builder); + } +} + +@functions +{ + + + static string GetForeign(CodeForeign foreign, CodeEntity entity) + { + List list = new List(); + + list.Add("builder"); + list.Add(Relation(foreign, entity)); + list.Add(";"); + + return list.ExpandAndToString(""); + } + + private static string Relation(CodeForeign foreign, CodeEntity entity) + { + string line = string.Empty; + switch (foreign.ForeignRelation) + { + case ForeignRelation.OneToMany: + line += ".HasMany"; + break; + case ForeignRelation.ManyToOne: + line += ".HasOne"; + break; + case ForeignRelation.OneToOne: + line += ".HasOne"; + break; + case ForeignRelation.OwnsOne: + line += ".OwnsOne"; + break; + case ForeignRelation.OwnsMany: + line += ".OwnsMany"; + break; + default: + throw new ArgumentOutOfRangeException(); + } + + if (!string.IsNullOrEmpty(foreign.OtherEntity)) + { + line += string.Format("<{0}>", TypeHelper.ToSingleTypeName(foreign.OtherEntity)); + } + line += "("; + if (!string.IsNullOrEmpty(foreign.SelfNavigation)) + { + line += string.Format("m => m.{0}", foreign.SelfNavigation); + } + line += ")"; + switch (foreign.ForeignRelation) + { + case ForeignRelation.OneToMany: + line += ".WithOne("; + break; + case ForeignRelation.ManyToOne: + line += ".WithMany("; + break; + case ForeignRelation.OneToOne: + line += ".WithOne("; + break; + case ForeignRelation.OwnsOne: + break; + case ForeignRelation.OwnsMany: + break; + default: + throw new ArgumentOutOfRangeException(); + } + if (!new []{ForeignRelation.OwnsOne, ForeignRelation.OwnsMany}.Contains(foreign.ForeignRelation)) + { + if (!string.IsNullOrEmpty(foreign.OtherNavigation)) + { + line += string.Format("n => n.{0})", foreign.OtherNavigation); + } + else + { + line += ")"; + } + if (!string.IsNullOrEmpty(foreign.SelfForeignKey)) + { + line += ".HasForeignKey"; + if (foreign.ForeignRelation == ForeignRelation.OneToOne) + { + line += string.Format("<{0}>", TypeHelper.ToSingleTypeName(entity.Name)); + } + line += string.Format("(m => m.{0})", foreign.SelfForeignKey); + } + if (foreign.IsRequired) + { + line += ".IsRequired()"; + } + if (foreign.DeleteBehavior != null) + { + line += string.Format(".OnDelete(DeleteBehavior.{0})", foreign.DeleteBehavior.Value.ToString()); + } + } + return line; + } +} diff --git a/src/OSharp.CodeGeneration/Templates/cs_InputDto.cshtml b/src/OSharp.CodeGeneration/Templates/cs_InputDto.cshtml new file mode 100644 index 0000000..95d4b1f --- /dev/null +++ b/src/OSharp.CodeGeneration/Templates/cs_InputDto.cshtml @@ -0,0 +1,106 @@ +@inherits MiniRazor.TemplateBase +@namespace OSharp.CodeGeneration.Templates +@using System; +@using System.Collections.Generic +@using System.Linq +@using OSharp.CodeGeneration.Services.Entities +@using OSharp.CodeGeneration.Utils +@using OSharp.Collections; +@using OSharp.Exceptions; +@using OSharp.Extensions; +@{ + CodeEntity entity = Model; + string keyType = TypeHelper.ToSingleTypeName(entity.PrimaryKeyTypeFullName); +}// ----------------------------------------------------------------------- +// +// 此代码由代码生成器生成。 +// 手动更改此文件可能导致应用程序出现意外的行为。 +// 如果重新生成代码,对此文件的任何修改都会丢失。 +// 如果需要扩展此类:可遵守如下规则进行扩展: +// 1.横向扩展:如需添加额外的属性,可新建文件“@(entity.Name)InputDto.cs”的分部类“public partial class @(entity.Name)InputDto”}添加属性 +// +// +// +// @entity.Module.Project.Copyright +// +// @entity.Module.Project.SiteUrl +// @entity.Module.Project.Creator +// ----------------------------------------------------------------------- + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.ComponentModel.DataAnnotations; + +using OSharp.Entity; +using OSharp.Mapping; + +using @(entity.Module.Namespace).Entities; + + +namespace @(entity.Module.Namespace).Dtos +{ + /// <summary> + /// 输入DTO:@(entity.Display)信息 + /// </summary> + [MapTo(typeof(@(entity.Name)))] + [Description("@(entity.Display)信息")] + public partial class @(entity.Name)InputDto : IInputDto<@(keyType)> + { + /// <summary> + /// 获取或设置 编号 + /// </summary> + [DisplayName("编号")] + public @(keyType) Id { get; set; } + +@foreach (CodeProperty prop in entity.Properties.Where(m => m.IsInputDto)) +{ + /// <summary> + /// 获取或设置 @(prop.Display) + /// </summary> + [@GetAttributes(prop)] + public @GetPropString(prop) @prop.Name { get; set; } + + +} + } +} +@functions +{ + + private static string GetAttributes(CodeProperty prop) + { + Listlist = new List(); + list.Add(string.Format("DisplayName(\"{0}\")", prop.Display)); + if (prop.TypeName == "System.String") + { + if (prop.IsRequired.HasValue && prop.IsRequired.Value) + { + list.Add("Required"); + } + if (prop.MaxLength > 0) + { + string min = prop.MinLength > -1 ? string.Format(", MinimumLength = {0}", prop.MinLength.Value) : ""; + list.Add(string.Format("StringLength({0}{1})", prop.MaxLength.Value, min)); + } + } + return list.ExpandAndToString(", "); + } + + private static string GetPropString(CodeProperty prop) + { + Listlist = new List(); + + string propType = TypeHelper.ToSingleTypeName(prop.TypeName); + //可空的值类型,添加?符号 + Type tmpType = Type.GetType(prop.TypeName); + if (prop.IsNullable && tmpType != null && tmpType.IsValueType) + { + propType += "?"; + } + list.Add(propType); + + return list.ExpandAndToString(""); + } + +} diff --git a/src/OSharp.CodeGeneration/Templates/cs_OutputDto.cshtml b/src/OSharp.CodeGeneration/Templates/cs_OutputDto.cshtml new file mode 100644 index 0000000..b3edb6e --- /dev/null +++ b/src/OSharp.CodeGeneration/Templates/cs_OutputDto.cshtml @@ -0,0 +1,148 @@ +@inherits MiniRazor.TemplateBase +@namespace OSharp.CodeGeneration.Templates +@using System; +@using System.Collections.Generic +@using System.Linq +@using OSharp.CodeGeneration.Services.Entities +@using OSharp.CodeGeneration.Utils +@using OSharp.Collections; +@using OSharp.Exceptions; +@using OSharp.Extensions; +@{ + CodeEntity entity = Model; + string keyType = TypeHelper.ToSingleTypeName(entity.PrimaryKeyTypeFullName); + List addNamespaces = entity.Properties.Where(m => m.IsOutputDto && m.RelateEntity != null).Select(m => m.RelateEntity) + .Union(entity.Properties.Where(m => m.IsOutputDto && m.TypeName.Contains(".") && !m.TypeName.StartsWith("System.")).Select(m => m.TypeName)) + .Select(m => TypeHelper.GetNamespace(m).Replace(".Entities", ".Dtos")).Distinct().Where(m => m != entity.Module.Namespace + ".Dtos").ToList(); + +}// ----------------------------------------------------------------------- +// +// 此代码由代码生成器生成。 +// 手动更改此文件可能导致应用程序出现意外的行为。 +// 如果重新生成代码,对此文件的任何修改都会丢失。 +// 如果需要扩展此类:可遵守如下规则进行扩展: +// 1.横向扩展:如需添加额外的属性,可新建文件“@(entity.Name)OutputDto.cs”的分部类“public partial class @(entity.Name)OutputDto”}添加属性 +// +// +// +// @entity.Module.Project.Copyright +// +// @entity.Module.Project.SiteUrl +// @entity.Module.Project.Creator +// ----------------------------------------------------------------------- + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.ComponentModel.DataAnnotations; + +using OSharp.Entity; +using OSharp.Mapping; + +using @(entity.Module.Namespace).Entities; +@foreach (var space in addNamespaces) +{ +using @(space); +} + +namespace @(entity.Module.Namespace).Dtos +{ + /// <summary> + /// 输入DTO:@(entity.Display)信息 + /// </summary> + [MapFrom(typeof(@(entity.Name)))] + [Description("@(entity.Display)信息")] + public partial class @(entity.Name)OutputDto : @(GetInterfaces(entity)) + { + /// + /// 初始化一个类型的新实例 + /// + public @(entity.Name)OutputDto() + { } + + /// + /// 初始化一个类型的新实例 + /// + public @(entity.Name)OutputDto(@(entity.Name) entity) + { + Id = entity.Id; + @(GetCtorString(entity.Properties.Where(m => m.IsOutputDto && !m.IsNavigation).ToArray())); + } + + /// <summary> + /// 获取或设置 编号 + /// </summary> + [DisplayName("编号")] + public @(keyType) Id { get; set; } + +@foreach (CodeProperty prop in entity.Properties.Where(m => m.IsOutputDto)) +{ + /// <summary> + /// 获取或设置 @(prop.Display) + /// </summary> + [DisplayName("@(prop.Display)")] + public @GetPropString(prop) @prop.Name { get; set; } + + +} +@if(entity.IsDataAuth) +{ + /// + /// 获取或设置 是否可更新的数据权限状态 + /// + public bool Updatable { get; set; } + + /// + /// 获取或设置 是否可删除的数据权限状态 + /// + public bool Deletable { get; set; } + + +} + } +} +@functions +{ + private static string GetInterfaces(CodeEntity entity) + { + Listlist = new List(); + list.Add("IOutputDto"); + if (entity.IsDataAuth) + { + list.Add("IDataAuthEnabled"); + } + return list.ExpandAndToString(", "); + } + + private static string GetPropString(CodeProperty prop) + { + Listlist = new List(); + if (!prop.IsNavigation) + { + string propType = TypeHelper.ToSingleTypeName(prop.TypeName); + //可空的值类型,添加?符号 + Type tmpType = Type.GetType(prop.TypeName); + if (prop.IsNullable && tmpType != null && tmpType.IsValueType) + { + propType += "?"; + } + list.Add(propType); + } + else + { + string output = TypeHelper.ToSingleTypeName(prop.RelateEntity) + "OutputDto"; + list.Add(prop.TypeName == "ICollection<>" ? string.Format("ICollection<{0}>", output) : output); + } + return list.ExpandAndToString(""); + } + + private static string GetCtorString(CodeProperty[] props) + { + Listlist = new List(); + foreach (CodeProperty prop in props) + { + list.Add(string.Format("{0} = entity.{0}", prop.Name)); + } + return list.ExpandAndToString(";\r\n "); + } +} diff --git a/src/OSharp.CodeGeneration/Templates/cs_ServiceContract.cshtml b/src/OSharp.CodeGeneration/Templates/cs_ServiceContract.cshtml new file mode 100644 index 0000000..9bb7cde --- /dev/null +++ b/src/OSharp.CodeGeneration/Templates/cs_ServiceContract.cshtml @@ -0,0 +1,102 @@ +@inherits MiniRazor.TemplateBase +@namespace OSharp.CodeGeneration.Templates +@using System; +@using OSharp.CodeGeneration.Services.Entities +@using OSharp.CodeGeneration.Utils +@using OSharp.Collections; +@using OSharp.Exceptions; +@using OSharp.Extensions; +@{ + CodeModule module = Model; +}// ----------------------------------------------------------------------- +// +// 此代码由代码生成器生成。 +// 手动更改此文件可能导致应用程序出现意外的行为。 +// 如果重新生成代码,对此文件的任何修改都会丢失。 +// 如果需要扩展此类,可以遵守如下规则进行扩展: +// 1. 横向扩展:如需给当前模块添加方法接口,可新建文件“I@(module.Name)Contract.cs”的分部接口“public partial interface I@(module.Name)Contract”添加方法,并添加相应新的分部基类 abstract partial class @(module.Name)ServiceBase 实现新方法 +// +// +// +// @module.Project.Copyright +// +// @module.Project.SiteUrl +// @module.Project.Creator +// ----------------------------------------------------------------------- + +using System; +using System.Linq; +using System.Linq.Expressions; +using System.Threading.Tasks; + +using OSharp.Data; +using OSharp.Extensions; + +using @(module.Namespace).Dtos; +using @(module.Namespace).Entities; + + +namespace @(module.Namespace) +{ + /// + /// 业务契约接口:@(module.Display)模块 + /// + public partial interface I@(module.Name)Contract + { +@foreach (CodeEntity entity in module.Entities) +{ + string keyType = TypeHelper.ToSingleTypeName(entity.PrimaryKeyTypeFullName); + #region @(entity.Display)信息业务 + + /// <summary> + /// 获取 @(entity.Display)信息查询数据集 + /// </summary> + IQueryable<@(entity.Name)> @(entity.Name.ToPlural()) { get; } + + /// <summary> + /// 检查@(entity.Display)信息信息是否存在 + /// </summary> + /// <param name="predicate">检查谓语表达式</param> + /// <param name="id">更新的@(entity.Display)信息编号</param> + /// <returns>@(entity.Display)信息是否存在</returns> + Task<bool> Check@(entity.Name)Exists(Expression<Func<@(entity.Name), bool>> predicate, @keyType id = default(@(keyType))); + + @if (entity.Addable) { + + /// <summary> + /// 添加@(entity.Display)信息信息 + /// </summary> + /// <param name="dtos">要添加的@(entity.Display)信息DTO信息</param> + /// <returns>业务操作结果</returns> + Task<OperationResult> Create@(entity.Name.ToPlural())(params @(entity.Name)InputDto[] dtos); + + } + @if (entity.Updatable) + { + + /// <summary> + /// 更新@(entity.Display)信息信息 + /// </summary> + /// <param name="dtos">包含更新信息的@(entity.Display)信息DTO信息</param> + /// <returns>业务操作结果</returns> + Task<OperationResult> Update@(entity.Name.ToPlural())(params @(entity.Name)InputDto[] dtos); + + } + @if (entity.Deletable) + { + + /// <summary> + /// 删除@(entity.Display)信息信息 + /// </summary> + /// <param name="ids">要删除的@(entity.Display)信息编号</param> + /// <returns>业务操作结果</returns> + Task<OperationResult> Delete@(entity.Name.ToPlural())(params @(keyType)[] ids); + + } + + #endregion + + +} + } +} diff --git a/src/OSharp.CodeGeneration/Templates/cs_ServiceEntityImplBase.cshtml b/src/OSharp.CodeGeneration/Templates/cs_ServiceEntityImplBase.cshtml new file mode 100644 index 0000000..912755a --- /dev/null +++ b/src/OSharp.CodeGeneration/Templates/cs_ServiceEntityImplBase.cshtml @@ -0,0 +1,111 @@ +@inherits MiniRazor.TemplateBase +@namespace OSharp.CodeGeneration.Templates +@using System; +@using OSharp.CodeGeneration.Services.Entities +@using OSharp.CodeGeneration.Utils +@using OSharp.Collections; +@using OSharp.Exceptions; +@using OSharp.Extensions; +@{ + CodeEntity entity = Model; + string keyType = TypeHelper.ToSingleTypeName(entity.PrimaryKeyTypeFullName); +}// ----------------------------------------------------------------------- +// +// 此代码由代码生成器生成。 +// 手动更改此文件可能导致应用程序出现意外的行为。 +// 如果重新生成代码,对此文件的任何修改都会丢失。 +// 如果需要扩展此类,可以遵守如下规则进行扩展: +// 1.横向扩展:如需给当前实体 @entity.Name 添加方法,可新建文件“@(entity.Module.Name)ServiceBase.@(entity.Name).cs”的分部类“public abstract partial class @(entity.Module.Name)ServiceBase”添加功能 +// 2.纵向扩展:如需要重写当前实体 @entity.Name 的业务实现,可新建文件“@(entity.Module.Name)Service.@(entity.Name).cs”的分部类“public partial class @(entity.Module.Name)Service”对现有方法进行方法重写实现 +// +// +// +// @entity.Module.Project.Copyright +// +// @entity.Module.Project.SiteUrl +// @entity.Module.Project.Creator +// ----------------------------------------------------------------------- + +using System; +using System.Linq; +using System.Linq.Expressions; +using System.Threading.Tasks; + +using OSharp.Data; +using OSharp.Dependency; +using OSharp.Extensions; +using OSharp.Mapping; + +using @(entity.Module.Namespace).Dtos; +using @(entity.Module.Namespace).Entities; + + +namespace @(entity.Module.Namespace) +{ + public abstract partial class @(entity.Module.Name)ServiceBase + { + /// <summary> + /// 获取 @(entity.Display)信息查询数据集 + /// </summary> + public IQueryable<@(entity.Name)> @(entity.Name.ToPlural()) + { + get { return @(entity.Name)Repository.QueryAsNoTracking(); } + } + + /// <summary> + /// 检查@(entity.Display)信息是否存在 + /// </summary> + /// <param name="predicate">检查谓语表达式</param> + /// <param name="id">更新的@(entity.Display)信息编号</param> + /// <returns>@(entity.Display)信息是否存在</returns> + public virtual Task<bool> Check@(entity.Name)Exists(Expression<Func<@(entity.Name), bool>> predicate, @(keyType) id = default(@(keyType))) + { + return @(entity.Name)Repository.CheckExistsAsync(predicate, id); + } +@if (entity.Addable) +{ + + /// <summary> + /// 添加@(entity.Display)信息 + /// </summary> + /// <param name="dtos">要添加的@(entity.Display)信息DTO信息</param> + /// <returns>业务操作结果</returns> + public virtual Task<OperationResult> Create@(entity.Name.ToPlural())(params @(entity.Name)InputDto[] dtos) + { + Check.Validate<@(entity.Name)InputDto, @(keyType)>(dtos, nameof(dtos)); + return @(entity.Name)Repository.InsertAsync(dtos); + } + +} +@if (entity.Updatable) +{ + + /// <summary> + /// 更新@(entity.Display)信息 + /// </summary> + /// <param name="dtos">包含更新信息的@(entity.Display)信息DTO信息</param> + /// <returns>业务操作结果</returns> + public virtual Task<OperationResult> Update@(entity.Name.ToPlural())(params @(entity.Name)InputDto[] dtos) + { + Check.Validate<@(entity.Name)InputDto, @(keyType)>(dtos, nameof(dtos)); + return @(entity.Name)Repository.UpdateAsync(dtos); + } + +} +@if (entity.Deletable) +{ + + /// <summary> + /// 删除@(entity.Display)信息 + /// </summary> + /// <param name="ids">要删除的@(entity.Display)信息编号</param> + /// <returns>业务操作结果</returns> + public virtual Task<OperationResult> Delete@(entity.Name.ToPlural())(params @(keyType)[] ids) + { + Check.NotNull(ids, nameof(ids)); + return @(entity.Name)Repository.DeleteAsync(ids); + } + +} + } +} diff --git a/src/OSharp.CodeGeneration/Templates/cs_ServiceMainImpl.cshtml b/src/OSharp.CodeGeneration/Templates/cs_ServiceMainImpl.cshtml new file mode 100644 index 0000000..0be837d --- /dev/null +++ b/src/OSharp.CodeGeneration/Templates/cs_ServiceMainImpl.cshtml @@ -0,0 +1,41 @@ +@inherits MiniRazor.TemplateBase +@namespace OSharp.CodeGeneration.Templates +@using System; +@using OSharp.CodeGeneration.Services.Entities +@using OSharp.CodeGeneration.Utils +@using OSharp.Collections; +@using OSharp.Exceptions; +@using OSharp.Extensions; +@{ + CodeModule module = Model; +}// ----------------------------------------------------------------------- +// +// 这个文件只生成一次,再次生成不会被覆盖。 +// 可以在此类进行继承重写来扩展基类 @(module.Name)ServiceBase +// +// +// +// @module.Project.Copyright +// +// @module.Project.SiteUrl +// @module.Project.Creator +// ----------------------------------------------------------------------- + +using System; + + +namespace @(module.Namespace) +{ + /// <summary> + /// 业务实现基类:@(module.Display)模块 + /// </summary> + public partial class @(module.Name)Service : @(module.Name)ServiceBase + { + /// + /// 初始化一个<see cref="@(module.Name)Service"/>类型的新实例 + /// + public @(module.Name)Service(IServiceProvider provider) + : base(provider) + { } + } +} diff --git a/src/OSharp.CodeGeneration/Templates/cs_ServiceMainImplBase.cshtml b/src/OSharp.CodeGeneration/Templates/cs_ServiceMainImplBase.cshtml new file mode 100644 index 0000000..fad5a34 --- /dev/null +++ b/src/OSharp.CodeGeneration/Templates/cs_ServiceMainImplBase.cshtml @@ -0,0 +1,94 @@ +@inherits MiniRazor.TemplateBase +@namespace OSharp.CodeGeneration.Templates +@using System; +@using OSharp.CodeGeneration.Services.Entities +@using OSharp.CodeGeneration.Utils +@using OSharp.Collections; +@using OSharp.Exceptions; +@using OSharp.Extensions; +@{ + CodeModule module = Model; +}// ----------------------------------------------------------------------- +// +// 此代码由代码生成器生成。 +// 手动更改此文件可能导致应用程序出现意外的行为。 +// 如果重新生成代码,对此文件的任何修改都会丢失。 +// 如果需要扩展此类,请在控制器类型 @(module.Name)Service 进行继承重写 +// +// +// +// @module.Project.Copyright +// +// @module.Project.SiteUrl +// @module.Project.Creator +// ----------------------------------------------------------------------- + +using System; +using System.Linq; +using System.Threading.Tasks; + +using OSharp.Core.Systems; +using OSharp.Data; +using OSharp.Entity; +using OSharp.EventBuses; +using OSharp.Extensions; +using OSharp.Identity; + +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; + +using @(module.Namespace).Dtos; +using @(module.Namespace).Entities; + + +namespace @(module.Namespace) +{ + /// <summary> + /// 业务实现基类:@(module.Display)模块 + /// </summary> + public abstract partial class @(module.Name)ServiceBase : I@(module.Name)Contract + { + /// <summary> + /// 初始化一个<see cref="@(module.Name)Service"/>类型的新实例 + /// </summary> + protected @(module.Name)ServiceBase(IServiceProvider provider) + { + ServiceProvider = provider; + Logger = provider.GetLogger(GetType()); + } + + #region 属性 + + /// + /// 获取 服务提供者对象 + /// + protected IServiceProvider ServiceProvider { get; } + + /// + /// 获取 日志对象 + /// + protected ILogger Logger { get; } + +@foreach (CodeEntity entity in module.Entities) +{ + string keyType = TypeHelper.ToSingleTypeName(entity.PrimaryKeyTypeFullName); + /// <summary> + /// 获取 @(entity.Display)信息仓储对象 + /// </summary> + protected IRepository<@(entity.Name), @(keyType)> @(entity.Name)Repository => ServiceProvider.GetRequiredService<IRepository<@(entity.Name), @(keyType)>>(); + + +} + /// <summary> + /// 获取 事件总线 + /// </summary> + protected IEventBus EventBus => ServiceProvider.GetService<IEventBus>(); + + /// <summary> + /// 获取 设置存储对象 + /// </summary> + protected IKeyValueStore KeyValueStore => ServiceProvider.GetService<IKeyValueStore>(); + + #endregion + } +} diff --git a/src/OSharp.CodeGeneration/Templates/cs_ServicePack.cshtml b/src/OSharp.CodeGeneration/Templates/cs_ServicePack.cshtml new file mode 100644 index 0000000..b220dcd --- /dev/null +++ b/src/OSharp.CodeGeneration/Templates/cs_ServicePack.cshtml @@ -0,0 +1,60 @@ +@inherits MiniRazor.TemplateBase +@namespace OSharp.CodeGeneration.Templates +@using System; +@using OSharp.CodeGeneration.Services.Entities +@using OSharp.CodeGeneration.Utils +@using OSharp.Collections; +@using OSharp.Exceptions; +@using OSharp.Extensions; +@{ + CodeModule module = Model; +}// ----------------------------------------------------------------------- +// +// 这个文件只生成一次,再次生成不会被覆盖。 +// 可以在此类的AddServices方法给“@(module.Name)”模块添加自定义服务配对,或者在UsePack方法进行模块初始化 +// +// +// +// @module.Project.Copyright +// +// @module.Project.SiteUrl +// @module.Project.Creator +// ----------------------------------------------------------------------- + +using System; +using System.ComponentModel; + +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection.Extensions; + +using OSharp.Core.Packs; + + +namespace @(module.Namespace) +{ + /// <summary> + /// @(module.Display)模块 + /// </summary> + [Description("@(module.Display)模块")] + public class @(module.Name)Pack : OsharpPack + { + /// <summary>将模块服务添加到依赖注入服务容器中</summary> + /// <param name="services">依赖注入服务容器</param> + /// <returns></returns> + public override IServiceCollection AddServices(IServiceCollection services) + { + services.TryAddScoped<I@(module.Name)Contract, @(module.Name)Service>(); + + return services; + } + + /// <summary> + /// 应用模块服务 + /// </summary> + /// <param name="provider">服务提供者</param> + public override void UsePack(IServiceProvider provider) + { + base.UsePack(provider); + } + } +} diff --git a/src/OSharp.CodeGeneration/Templates/ng_AlainComponent.cshtml b/src/OSharp.CodeGeneration/Templates/ng_AlainComponent.cshtml new file mode 100644 index 0000000..f771a94 --- /dev/null +++ b/src/OSharp.CodeGeneration/Templates/ng_AlainComponent.cshtml @@ -0,0 +1,171 @@ +@inherits MiniRazor.TemplateBase +@namespace OSharp.CodeGeneration.Templates +@using System; +@using System.Collections.Generic; +@using System.Linq; +@using OSharp.CodeGeneration.Services.Entities +@using OSharp.CodeGeneration.Utils +@using OSharp.Collections; +@using OSharp.Exceptions; +@using OSharp.Extensions; +@{ + CodeEntity entity = Model; + string keyType = TypeHelper.ToSingleTypeName(entity.PrimaryKeyTypeFullName); + string lowerName = entity.Name.UpperToLowerAndSplit(); +}// ------------------------------------------------------------------------------ +// +// 这个文件只生成一次,再次生成不会被覆盖。 +// +// +// +// @entity.Module.Project.Copyright +// +// @entity.Module.Project.SiteUrl +// @entity.Module.Project.Creator +// ----------------------------------------------------------------------- + +import { Component, OnInit, Injector } from '@@angular/core'; +import { SFUISchema, SFSchema } from '@@delon/form'; +import { OsharpSTColumn } from '@@shared/osharp/services/alain.types'; +import { STComponentBase } from '@@shared/osharp/components/st-component-base'; + +@@Component({ + selector: 'app-@(lowerName)', + templateUrl: './@(lowerName).component.html', + styles: [] +}) +export class @(entity.Name)Component extends STComponentBase implements OnInit { + + constructor(injector: Injector) { + super(injector); + this.moduleName = '@(entity.Name.LowerFirstChar())'; + } + + ngOnInit() { + super.InitBase(); + } + + protected GetSTColumns(): OsharpSTColumn[] { + let columns: OsharpSTColumn[] = [ + { + title: '操作', fixed: 'left', width: 65, buttons: [{ + text: '操作', children: [ +@if (entity.Updatable) +{ + string line = string.Empty; + if (entity.IsDataAuth) + { + line += "iif: row => row.Updatable, "; + } + { text: '编辑', icon: 'edit', acl: 'Root.Admin.@(entity.Module.Name).@(entity.Name).Update', @(line)click: row => this.edit(row) }, + +} +@if (entity.Deletable) +{ + string line = string.Empty; + if (entity.IsDataAuth) + { + line += "iif: row => row.Deletable, "; + } + { text: '删除', icon: 'delete', type: 'del', acl: 'Root.Admin.@(entity.Module.Name).@(entity.Name).Delete', @(line)click: row => this.delete(row) }, + +} + ] + }] + }, + @GetIdColumn(entity) +@foreach (var prop in entity.Properties.Where(m => m.IsOutputDto)) +{ + { @(GetColumnProps(prop)) }, + +} + ]; + return columns; + } +@{ + CodeProperty[] requiredProps = entity.Properties.Where(m => m.IsRequired.GetValueOrDefault(false)).ToArray(); + if (requiredProps.Length > 0) + { + protected GetSFSchema(): SFSchema { + let schema: SFSchema = { + properties: this.ColumnsToSchemas(this.columns), + required: [@(requiredProps.Select(m => string.Format("'{0}'", m.Name)).ExpandAndToString(", "))] + }; + return schema; + } + + + } +} + protected GetSFUISchema(): SFUISchema { + let ui: SFUISchema = { + @(GetSFUISchemas(entity.Properties.ToArray())) + }; + return ui; + } +} + +@functions +{ + + static string GetIdColumn(CodeEntity entity) + { + string ftype = new[] { typeof(string).FullName, typeof(Guid).FullName }.Contains(entity.PrimaryKeyTypeFullName) ? "string" : "number"; + string line = "{ title: '编号', index: 'Id', sort: true, readOnly: true, editable: true, filterable: true, ftype: '" + ftype + "' },"; + return line; + } + + static string GetColumnProps(CodeProperty prop) + { + Listlist = new List(); + list.Add("title: '{0}'".FormatWith(prop.Display)); + list.Add("index: '{0}'".FormatWith(prop.Name)); + list.AddIf("readOnly: true", prop.IsReadonly); + list.AddIf("sort: true", prop.Sortable); + list.AddIf("editable: true", prop.Updatable); + list.AddIf("filterable: true", prop.Filterable); + list.AddRange(GetColumnType(prop)); + + return list.ExpandAndToString(", "); + } + + static string[] GetColumnType(CodeProperty prop) + { + Listlist = new List(); + switch (prop.TypeName) + { + case "System.String": + case "System.Guid": + list.Add("ftype: 'string'"); + break; + case "System.Int32": + case "System.Int64": + case "System.Double": + list.Add("type: 'number'"); + break; + case "System.Boolean": + list.Add("type: 'yn'"); + break; + case "System.DateTime": + list.Add("type: 'date'"); + break; + default: + list.Add("ftype: 'string'"); + break; + } + + return list.ToArray(); + } + + static string GetSFUISchemas(CodeProperty[] props) + { + Listlist = new List(); + list.Add("'*': { spanLabelFixed: 100, grid: { span: 12 } }"); + foreach (CodeProperty prop in props.Where(m => m.TypeName == "System.String")) + { + list.Add(string.Format("${0}: {{ grid: {{ span: 24 }} }}", prop.Name)); + } + + return list.ExpandAndToString(",\r\n "); + } +} diff --git a/src/OSharp.CodeGeneration/Templates/ng_AlainComponentHtml.cshtml b/src/OSharp.CodeGeneration/Templates/ng_AlainComponentHtml.cshtml new file mode 100644 index 0000000..50a2dc5 --- /dev/null +++ b/src/OSharp.CodeGeneration/Templates/ng_AlainComponentHtml.cshtml @@ -0,0 +1,39 @@ +@inherits MiniRazor.TemplateBase +@namespace OSharp.CodeGeneration.Templates +@using System; +@using System.Collections.Generic; +@using System.Linq; +@using OSharp.CodeGeneration.Services.Entities +@using OSharp.CodeGeneration.Utils +@using OSharp.Collections; +@using OSharp.Exceptions; +@using OSharp.Extensions; +@{ + CodeEntity entity = Model; + string keyType = TypeHelper.ToSingleTypeName(entity.PrimaryKeyTypeFullName); + string lowerName = entity.Name.UpperToLowerAndSplit(); +} + + + +
+ +@if (entity.Addable) +{ + + +} + +
+ +
+ + + + + + diff --git a/src/OSharp.CodeGeneration/Templates/ng_AlainModule.cshtml b/src/OSharp.CodeGeneration/Templates/ng_AlainModule.cshtml new file mode 100644 index 0000000..90a1874 --- /dev/null +++ b/src/OSharp.CodeGeneration/Templates/ng_AlainModule.cshtml @@ -0,0 +1,45 @@ +@inherits MiniRazor.TemplateBase +@namespace OSharp.CodeGeneration.Templates +@using System; +@using System.Linq; +@using OSharp.CodeGeneration.Services.Entities +@using OSharp.CodeGeneration.Utils +@using OSharp.Collections; +@using OSharp.Exceptions; +@using OSharp.Extensions; +@{ + CodeModule module = Model; +}// ----------------------------------------------------------------------- +// +// 这个文件只生成一次,再次生成不会被覆盖。 +// +// +// +// @module.Project.Copyright +// +// @module.Project.SiteUrl +// @module.Project.Creator +// ----------------------------------------------------------------------- + +import { NgModule } from '@@angular/core'; +import { CommonModule } from '@@angular/common'; +import { SharedModule } from '@@shared'; +import { @(module.Name)RoutingModule } from './@(module.Name.UpperToLowerAndSplit()).routing'; +@foreach (CodeEntity entity in module.Entities.Where(m => m.Listable)) +{ + var lowerName = entity.Name.UpperToLowerAndSplit(); +import { @(entity.Name)Component } from './@(lowerName)/@(lowerName).component'; + +} + +@@NgModule({ + imports: [CommonModule, SharedModule, @(module.Name)RoutingModule], + declarations: [ +@foreach (var entity in module.Entities.Where(m => m.Listable)) +{ + @(entity.Name)Component, + +} + ] +}) +export class @(module.Name)Module { } diff --git a/src/OSharp.CodeGeneration/Templates/ng_AlainOther.cshtml b/src/OSharp.CodeGeneration/Templates/ng_AlainOther.cshtml new file mode 100644 index 0000000..0ae94cb --- /dev/null +++ b/src/OSharp.CodeGeneration/Templates/ng_AlainOther.cshtml @@ -0,0 +1,86 @@ +@inherits MiniRazor.TemplateBase +@namespace OSharp.CodeGeneration.Templates +@using System; +@using System.Collections.Generic +@using System.Linq; +@using OSharp.CodeGeneration.Services.Entities +@using OSharp.CodeGeneration.Utils +@using OSharp.Collections; +@using OSharp.Exceptions; +@using OSharp.Extensions; +@{ + CodeProject project = Model; +} +/* +各模块路由: +@foreach (var module in project.Modules) +{ + string name = module.Name.UpperToLowerAndSplit(); + { path: '@(name)', loadChildren: () => import('./@(name)/@(name).module').then(m => m.@(module.Name)Module), canActivateChild: [ACLGuard], data: { guard: 'Root.Admin.@(module.Name)' } }, + +} + +各模块组件路由: +@foreach (var module in project.Modules) +{ +@module.Display 模块组件路由数据 +@GetComponentRouters(module) + +} + +各模块菜单数据: +@foreach (var module in project.Modules) +{ +@module.Display 模块菜单数据 +@GetMenu(module) + +} +*/ +@functions +{ + + static string GetComponentRouters(CodeModule module) + { + Listlist = new List(); + foreach (var entity in module.Entities.Where(m=>m.Listable)) + { + list.Add(string.Format("{{ path: '{0}', component: {1}Component, canActivate: [ACLGuard], data: {{ title: '{2}管理', reuse: true, guard: 'Root.Admin.{3}.{1}.Read' }} }},\r\n", entity.Name.UpperToLowerAndSplit(), entity.Name, entity.Display, module.Name)); + } + return list.ExpandAndToString(""); + } + + static string GetMenu(CodeModule module) + { + Listlist = new List(); + list.Add("{\r\n"); + list.Add(string.Format(" \"text\": \"{0}模块\",\r\n", module.Display)); + list.Add( " \"group\": \"true\",\r\n"); + list.Add( " \"icon\": \"anticon-border\",\r\n"); + list.Add(string.Format(" \"acl\": \"Root.Admin.{0}\",\r\n", module.Name)); + string children = " \"children\": ["; + ListchildList = new List(); + foreach (var entity in module.Entities.Where(m => m.Listable)) + { + childList.Add(GetMenu(entity)); + } + if (childList.Count > 0) + { + children += childList.ExpandAndToString(", "); + } + children += "]\r\n"; + list.Add(children); + list.Add("}"); + return list.ExpandAndToString(""); + } + + static string GetMenu(CodeEntity entity) + { + Listlist = new List(); + list.Add("{\r\n"); + list.Add(string.Format(" \"text\": \"{0}管理\",\r\n", entity.Display)); + list.Add(string.Format(" \"link\": \"/{0}/{1}\",\r\n", entity.Module.Name.UpperToLowerAndSplit(), entity.Name.UpperToLowerAndSplit())); + list.Add(string.Format(" \"acl\": \"Root.Admin.{0}.{1}\"\r\n", entity.Module.Name, entity.Name)); + list.Add(" }"); + return list.ExpandAndToString(""); + } +} diff --git a/src/OSharp.CodeGeneration/Templates/ng_AlainRouting.cshtml b/src/OSharp.CodeGeneration/Templates/ng_AlainRouting.cshtml new file mode 100644 index 0000000..37a4c91 --- /dev/null +++ b/src/OSharp.CodeGeneration/Templates/ng_AlainRouting.cshtml @@ -0,0 +1,47 @@ +@inherits MiniRazor.TemplateBase +@namespace OSharp.CodeGeneration.Templates +@using System; +@using System.Linq; +@using OSharp.CodeGeneration.Services.Entities +@using OSharp.CodeGeneration.Utils +@using OSharp.Collections; +@using OSharp.Exceptions; +@using OSharp.Extensions; +@{ + CodeModule module = Model; +}// ----------------------------------------------------------------------- +// +// 这个文件只生成一次,再次生成不会被覆盖。 +// +// +// +// @module.Project.Copyright +// +// @module.Project.SiteUrl +// @module.Project.Creator +// ----------------------------------------------------------------------- + +import { NgModule } from '@@angular/core'; +import { Routes, RouterModule } from '@@angular/router'; +import { ACLGuard } from '@@delon/acl'; +@foreach (CodeEntity entity in module.Entities.Where(m => m.Listable)) +{ + var lowerName = entity.Name.UpperToLowerAndSplit(); + import { @(entity.Name)Component } from './@(lowerName)/@(lowerName).component'; + +} + +const routes: Routes = [ +@foreach (CodeEntity entity in module.Entities.Where(m => m.Listable)) +{ + var lowerName = entity.Name.UpperToLowerAndSplit(); + { path: '@(lowerName)', component: @(entity.Name)Component, canActivate: [ACLGuard], data: { title: '@(entity.Display)管理', reuse: true, guard: 'Root.Admin.@(module.Name).@(entity.Name).Read' } }, + +} +]; + +@@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class @(module.Name)RoutingModule { } diff --git a/src/OSharp.CodeGenerator/Migrations/20210409024821_Init.Designer.cs b/src/OSharp.CodeGenerator/Migrations/20210409133032_Init.Designer.cs similarity index 90% rename from src/OSharp.CodeGenerator/Migrations/20210409024821_Init.Designer.cs rename to src/OSharp.CodeGenerator/Migrations/20210409133032_Init.Designer.cs index af36b65..b106e48 100644 --- a/src/OSharp.CodeGenerator/Migrations/20210409024821_Init.Designer.cs +++ b/src/OSharp.CodeGenerator/Migrations/20210409133032_Init.Designer.cs @@ -9,7 +9,7 @@ using OSharp.Entity; namespace OSharp.CodeGenerator.Migrations { [DbContext(typeof(DefaultDbContext))] - [Migration("20210409024821_Init")] + [Migration("20210409133032_Init")] partial class Init { protected override void BuildTargetModel(ModelBuilder modelBuilder) @@ -287,6 +287,30 @@ namespace OSharp.CodeGenerator.Migrations b.ToTable("CodeGen_CodeProject"); }); + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeProjectTemplate", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("IsLocked") + .HasColumnType("INTEGER"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("TemplateId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("ProjectId"); + + b.HasIndex("TemplateId"); + + b.ToTable("CodeGen_CodeProjectTemplate"); + }); + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeProperty", b => { b.Property("Id") @@ -330,6 +354,9 @@ namespace OSharp.CodeGenerator.Migrations b.Property("IsOutputDto") .HasColumnType("INTEGER"); + b.Property("IsReadonly") + .HasColumnType("INTEGER"); + b.Property("IsRequired") .HasColumnType("INTEGER"); @@ -371,7 +398,7 @@ namespace OSharp.CodeGenerator.Migrations b.ToTable("CodeGen_CodeProperty"); }); - modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeSetting", b => + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeTemplate", b => { b.Property("Id") .ValueGeneratedOnAdd() @@ -402,9 +429,6 @@ namespace OSharp.CodeGenerator.Migrations .HasMaxLength(300) .HasColumnType("TEXT"); - b.Property("ProjectId") - .HasColumnType("TEXT"); - b.Property("TemplateFile") .IsRequired() .HasMaxLength(500) @@ -412,9 +436,7 @@ namespace OSharp.CodeGenerator.Migrations b.HasKey("Id"); - b.HasIndex("ProjectId"); - - b.ToTable("CodeGen_CodeSetting"); + b.ToTable("CodeGen_CodeTemplate"); }); modelBuilder.Entity("OSharp.Core.Systems.KeyValue", b => @@ -459,7 +481,7 @@ namespace OSharp.CodeGenerator.Migrations modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeForeign", b => { b.HasOne("OSharp.CodeGeneration.Services.Entities.CodeEntity", "Entity") - .WithMany() + .WithMany("Foreigns") .HasForeignKey("EntityId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); @@ -478,6 +500,25 @@ namespace OSharp.CodeGenerator.Migrations b.Navigation("Project"); }); + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeProjectTemplate", b => + { + b.HasOne("OSharp.CodeGeneration.Services.Entities.CodeProject", "Project") + .WithMany("ProjectTemplates") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("OSharp.CodeGeneration.Services.Entities.CodeTemplate", "Template") + .WithMany("ProjectTemplates") + .HasForeignKey("TemplateId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Project"); + + b.Navigation("Template"); + }); + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeProperty", b => { b.HasOne("OSharp.CodeGeneration.Services.Entities.CodeEntity", "Entity") @@ -489,17 +530,10 @@ namespace OSharp.CodeGenerator.Migrations b.Navigation("Entity"); }); - modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeSetting", b => - { - b.HasOne("OSharp.CodeGeneration.Services.Entities.CodeProject", "Project") - .WithMany() - .HasForeignKey("ProjectId"); - - b.Navigation("Project"); - }); - modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeEntity", b => { + b.Navigation("Foreigns"); + b.Navigation("Properties"); }); @@ -511,6 +545,13 @@ namespace OSharp.CodeGenerator.Migrations modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeProject", b => { b.Navigation("Modules"); + + b.Navigation("ProjectTemplates"); + }); + + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeTemplate", b => + { + b.Navigation("ProjectTemplates"); }); #pragma warning restore 612, 618 } diff --git a/src/OSharp.CodeGenerator/Migrations/20210409024821_Init.cs b/src/OSharp.CodeGenerator/Migrations/20210409133032_Init.cs similarity index 89% rename from src/OSharp.CodeGenerator/Migrations/20210409024821_Init.cs rename to src/OSharp.CodeGenerator/Migrations/20210409133032_Init.cs index d0a6644..ee25ca1 100644 --- a/src/OSharp.CodeGenerator/Migrations/20210409024821_Init.cs +++ b/src/OSharp.CodeGenerator/Migrations/20210409133032_Init.cs @@ -65,6 +65,25 @@ namespace OSharp.CodeGenerator.Migrations table.PrimaryKey("PK_CodeGen_CodeProject", x => x.Id); }); + migrationBuilder.CreateTable( + name: "CodeGen_CodeTemplate", + columns: table => new + { + Id = table.Column(type: "TEXT", nullable: false), + Name = table.Column(type: "TEXT", maxLength: 200, nullable: false), + MetadataType = table.Column(type: "INTEGER", nullable: false), + TemplateFile = table.Column(type: "TEXT", maxLength: 500, nullable: false), + Order = table.Column(type: "INTEGER", nullable: false), + OutputFileFormat = table.Column(type: "TEXT", maxLength: 300, nullable: false), + IsOnce = table.Column(type: "INTEGER", nullable: false), + IsSystem = table.Column(type: "INTEGER", nullable: false), + IsLocked = table.Column(type: "INTEGER", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_CodeGen_CodeTemplate", x => x.Id); + }); + migrationBuilder.CreateTable( name: "Systems_KeyValue", columns: table => new @@ -104,29 +123,29 @@ namespace OSharp.CodeGenerator.Migrations }); migrationBuilder.CreateTable( - name: "CodeGen_CodeSetting", + name: "CodeGen_CodeProjectTemplate", columns: table => new { Id = table.Column(type: "TEXT", nullable: false), - Name = table.Column(type: "TEXT", maxLength: 200, nullable: false), - MetadataType = table.Column(type: "INTEGER", nullable: false), - TemplateFile = table.Column(type: "TEXT", maxLength: 500, nullable: false), - Order = table.Column(type: "INTEGER", nullable: false), - OutputFileFormat = table.Column(type: "TEXT", maxLength: 300, nullable: false), - IsOnce = table.Column(type: "INTEGER", nullable: false), - IsSystem = table.Column(type: "INTEGER", nullable: false), IsLocked = table.Column(type: "INTEGER", nullable: false), - ProjectId = table.Column(type: "TEXT", nullable: true) + ProjectId = table.Column(type: "TEXT", nullable: false), + TemplateId = table.Column(type: "TEXT", nullable: false) }, constraints: table => { - table.PrimaryKey("PK_CodeGen_CodeSetting", x => x.Id); + table.PrimaryKey("PK_CodeGen_CodeProjectTemplate", x => x.Id); table.ForeignKey( - name: "FK_CodeGen_CodeSetting_CodeGen_CodeProject_ProjectId", + name: "FK_CodeGen_CodeProjectTemplate_CodeGen_CodeProject_ProjectId", column: x => x.ProjectId, principalTable: "CodeGen_CodeProject", principalColumn: "Id", - onDelete: ReferentialAction.Restrict); + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_CodeGen_CodeProjectTemplate_CodeGen_CodeTemplate_TemplateId", + column: x => x.TemplateId, + principalTable: "CodeGen_CodeTemplate", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( @@ -203,6 +222,7 @@ namespace OSharp.CodeGenerator.Migrations MinLength = table.Column(type: "INTEGER", nullable: true), MaxLength = table.Column(type: "INTEGER", nullable: true), IsNullable = table.Column(type: "INTEGER", nullable: false), + IsReadonly = table.Column(type: "INTEGER", nullable: false), IsVirtual = table.Column(type: "INTEGER", nullable: false), IsForeignKey = table.Column(type: "INTEGER", nullable: false), IsNavigation = table.Column(type: "INTEGER", nullable: false), @@ -254,16 +274,21 @@ namespace OSharp.CodeGenerator.Migrations table: "CodeGen_CodeModule", column: "ProjectId"); + migrationBuilder.CreateIndex( + name: "IX_CodeGen_CodeProjectTemplate_ProjectId", + table: "CodeGen_CodeProjectTemplate", + column: "ProjectId"); + + migrationBuilder.CreateIndex( + name: "IX_CodeGen_CodeProjectTemplate_TemplateId", + table: "CodeGen_CodeProjectTemplate", + column: "TemplateId"); + migrationBuilder.CreateIndex( name: "IX_CodeGen_CodeProperty_EntityId", table: "CodeGen_CodeProperty", column: "EntityId"); - migrationBuilder.CreateIndex( - name: "IX_CodeGen_CodeSetting_ProjectId", - table: "CodeGen_CodeSetting", - column: "ProjectId"); - migrationBuilder.CreateIndex( name: "KeyIndex", table: "Systems_KeyValue", @@ -283,14 +308,17 @@ namespace OSharp.CodeGenerator.Migrations name: "CodeGen_CodeForeign"); migrationBuilder.DropTable( - name: "CodeGen_CodeProperty"); + name: "CodeGen_CodeProjectTemplate"); migrationBuilder.DropTable( - name: "CodeGen_CodeSetting"); + name: "CodeGen_CodeProperty"); migrationBuilder.DropTable( name: "Systems_KeyValue"); + migrationBuilder.DropTable( + name: "CodeGen_CodeTemplate"); + migrationBuilder.DropTable( name: "CodeGen_CodeEntity"); diff --git a/src/OSharp.CodeGenerator/Migrations/DefaultDbContextModelSnapshot.cs b/src/OSharp.CodeGenerator/Migrations/DefaultDbContextModelSnapshot.cs index f48ca32..91e55aa 100644 --- a/src/OSharp.CodeGenerator/Migrations/DefaultDbContextModelSnapshot.cs +++ b/src/OSharp.CodeGenerator/Migrations/DefaultDbContextModelSnapshot.cs @@ -285,6 +285,30 @@ namespace OSharp.CodeGenerator.Migrations b.ToTable("CodeGen_CodeProject"); }); + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeProjectTemplate", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("IsLocked") + .HasColumnType("INTEGER"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("TemplateId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("ProjectId"); + + b.HasIndex("TemplateId"); + + b.ToTable("CodeGen_CodeProjectTemplate"); + }); + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeProperty", b => { b.Property("Id") @@ -328,6 +352,9 @@ namespace OSharp.CodeGenerator.Migrations b.Property("IsOutputDto") .HasColumnType("INTEGER"); + b.Property("IsReadonly") + .HasColumnType("INTEGER"); + b.Property("IsRequired") .HasColumnType("INTEGER"); @@ -369,7 +396,7 @@ namespace OSharp.CodeGenerator.Migrations b.ToTable("CodeGen_CodeProperty"); }); - modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeSetting", b => + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeTemplate", b => { b.Property("Id") .ValueGeneratedOnAdd() @@ -400,9 +427,6 @@ namespace OSharp.CodeGenerator.Migrations .HasMaxLength(300) .HasColumnType("TEXT"); - b.Property("ProjectId") - .HasColumnType("TEXT"); - b.Property("TemplateFile") .IsRequired() .HasMaxLength(500) @@ -410,9 +434,7 @@ namespace OSharp.CodeGenerator.Migrations b.HasKey("Id"); - b.HasIndex("ProjectId"); - - b.ToTable("CodeGen_CodeSetting"); + b.ToTable("CodeGen_CodeTemplate"); }); modelBuilder.Entity("OSharp.Core.Systems.KeyValue", b => @@ -457,7 +479,7 @@ namespace OSharp.CodeGenerator.Migrations modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeForeign", b => { b.HasOne("OSharp.CodeGeneration.Services.Entities.CodeEntity", "Entity") - .WithMany() + .WithMany("Foreigns") .HasForeignKey("EntityId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); @@ -476,6 +498,25 @@ namespace OSharp.CodeGenerator.Migrations b.Navigation("Project"); }); + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeProjectTemplate", b => + { + b.HasOne("OSharp.CodeGeneration.Services.Entities.CodeProject", "Project") + .WithMany("ProjectTemplates") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("OSharp.CodeGeneration.Services.Entities.CodeTemplate", "Template") + .WithMany("ProjectTemplates") + .HasForeignKey("TemplateId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Project"); + + b.Navigation("Template"); + }); + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeProperty", b => { b.HasOne("OSharp.CodeGeneration.Services.Entities.CodeEntity", "Entity") @@ -487,17 +528,10 @@ namespace OSharp.CodeGenerator.Migrations b.Navigation("Entity"); }); - modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeSetting", b => - { - b.HasOne("OSharp.CodeGeneration.Services.Entities.CodeProject", "Project") - .WithMany() - .HasForeignKey("ProjectId"); - - b.Navigation("Project"); - }); - modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeEntity", b => { + b.Navigation("Foreigns"); + b.Navigation("Properties"); }); @@ -509,6 +543,13 @@ namespace OSharp.CodeGenerator.Migrations modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeProject", b => { b.Navigation("Modules"); + + b.Navigation("ProjectTemplates"); + }); + + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeTemplate", b => + { + b.Navigation("ProjectTemplates"); }); #pragma warning restore 612, 618 } diff --git a/src/OSharp.CodeGenerator/OSharp.CodeGenerator.csproj b/src/OSharp.CodeGenerator/OSharp.CodeGenerator.csproj index 6f71654..3fc9cd7 100644 --- a/src/OSharp.CodeGenerator/OSharp.CodeGenerator.csproj +++ b/src/OSharp.CodeGenerator/OSharp.CodeGenerator.csproj @@ -17,8 +17,8 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - - + + diff --git a/src/OSharp.CodeGenerator/appsettings.json b/src/OSharp.CodeGenerator/appsettings.json index 2607c17..9277f6a 100644 --- a/src/OSharp.CodeGenerator/appsettings.json +++ b/src/OSharp.CodeGenerator/appsettings.json @@ -1,9 +1,9 @@ -{ +{ "OSharp": { "DbContexts": { "Sqlite": { "DbContextTypeName": "OSharp.Entity.DefaultDbContext,OSharp.EntityFrameworkCore", - "ConnectionString": "data source=osharp-code-generator.db", + "ConnectionString": "data source=d:/temp/osharp-code-generator.db", "DatabaseType": "Sqlite", "LazyLoadingProxiesEnabled": true, "AuditEntityEnabled": true, diff --git a/src/OSharp.CodeGenerator/osharp-code-generator.db b/src/OSharp.CodeGenerator/osharp-code-generator.db deleted file mode 100644 index 9d952f8369783353af83157c437988fde208a63b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 110592 zcmeI2&u`o28OKE{mTbkclC%la2E{n_;24fGD~{`RMbWAf z{rS9~=g0e!@6)_hl?;*DRkZ`bU{(`n5>r!&HyI|8NKBK@CGxpQK2zj#g?vttkNZct z{}b~)ow&O3M{^)5_r2NdeD3@C-)FwczB&7HMo)h;^X>Ha>CcnjOn;g9I{8V=I8jxP zZ{*VS+8Xt{bwju-izT%qZiotRes5`NSJaGtSlO9UgDtjLrd52a$};(|CVA#^Hp7s= zJlDxHE%r`}snyA6yIN&R^;)ylC~~zHli#{&%@&+B&ulfg&0=GRxykNaaYm{M2V!6> zx2o0eiZRt?N$<)+KcX|IH^lorNfU{rL@0KHZCHZ3gKr9lRZ-b9_9Ln#C9ay&Ydu*u z@p`&DDBKx1{kEhTJwc9ZQc*Qg+EZ?dWE}%BM+V}QZqFziYFwLo&luN;RSe1KkLb=3 z*sH-xxCVV{wMXNJgI4MdmfNVA+GQ^12jz=QgRQU)wpL=Be!H@p5UVonX_2Ydm@->s zi4B&D%~G+l{~JG zScxry*GlY?xo9gHNc|*M;&%RVtwg;iwv8vysx6IAtHj~V!FcD}9MrGZVMVlJoi_2B zoja~(9Vva9wac;(GqY)Wd6{~&VQIG6*A4MN=ZVAI7UZ57{GIV@HCTOuop7{kh(;|L zZs@Aw?q+05b@vgg&h+Y#I&0tXZNzRbPOqx%_kFvcMHd?al}s?jd~r$DVp&!4QX)#tf9R_$i{?0vr6v@ZE`FUccnuYZy*qs)Pt^| z42~Hd#Wcxgw5^ft-By67rlg62p=x0@YPYXRd;5l`jwpnkNzps2Q3?rJ>&Px=y5j8P zEN!Q z$DVCtqRXqP6ur3+Wz0UC;S0W>>4)c&X?kgidSprLApKb4|yEyW@o%I`oO7EB-Aq0;pFI`z;#*6=)A z*_8Hd1K>b`cOa3RB`$Ho4&)i?h7ydv11V8`;KmY_l00ck)1V8`;KmY`u z4S}B}ldsX&R<0FRuCM%Z<(0zf^)D0B3sI6UHxw`h!RC3*IaDC<4wQGfSUbL=1 zt?Elua@DO~EnK^{a{U#aQzXNx%#bxDb6+HK|H}Q1eBloSKmY_l00ck)1V8`;KmY_l z00cnbe}llKwx47$#u8R|0ZDSLUMK1>E(S1VBY_eq<{Q@00@8p2!H?xfB*=9 z00@8p2!H?xOfUiS{vXf(6Rcn?4Fo^{1V8`;KmY_l00ck)1V8`;2m##x!wf(G1V8`; zKmY_l00ck)1V8`;Kw$C-;QoK|b&M5)00@8p2!H?xfB*=900@8p2!H_Y|6v0l00JNY z0w4eaAOHd&00JNY0w6H?1aSX9`8vi5K>!3m00ck)1V8`;KmY_l00ck)_y4c~5C8!X z009sH0T2KI5C8!X009t~d;+-tpL`u-g&+U|AOHd&00JNY0w4eaAOHd&fct;g00@8p z2!H?xfB*=900@8p2!H?xOg;hJ|4+V-u|g040T2KI5C8!X009sH0T2KI5WxLEYybp6 z00ck)1V8`;KmY_l00ck)1SX#V?*AuW$5bgW#3HQ$mr>BX1+c3 zi_FyoH~nSe>*Oa1Hikv+yY%NDwzFxvP@q1&ZwPl~v7~my4N>9EZ&ooRqd!_QUuv+$ z7R$7XZ&g_)KiVMAT+U_~@|Wj2d8WnQX)(1r`D|CKOsQULwi-pQ)?)HoH?4X6^W~YX z2De#k>@YXkoh!~bHQ_)EjO138CA}*P{fOEvO*#;?{!Ovp>UYITPnKhb;`Fj$2*sYU zpJ#}G>;~Hy2<}d|sdjp@II^xQgo7puhS+IIBcd{8wo=@#wwQ&Lm6gJ>^^aLu`IYr= zfpq2cs@i^EB(Q?h4!W+8X2nj&)X|t$WlaJl4eVjqJyB$LLcrsKa{Wu`%T1V8zEXSI5EPUHqy(V4>GjX5Q+XlrC?W$65 zu-rz?G=JuDeo(&1G}sE;U~46|>32H232{2p-4>a8jTlXpB@S9DHcQ1ao6RhKaPhR| zL%|si=aLy;OjzRB}nTHwF^{&tsw={8A zI*iy1O6oyZPzGBC*^b<(-XsxiTa(>>o*FAesw6zv+nBdT?e;ZkZ{P6LWivluBUpTx znN8En%haO{OBKz&ZiojuPd2aHg4`2>zcYR%1glT53y*dU!EecMLsu2gdR=~2ow>t? z)DiLBQs)rh_KM#2NXU94lcJl;R6}o}pU5`JlvnAy{%c_Z@ZGH0%$G z|M!MnnoH5|6rxyq{o9E|h0(GsJCmY!R*y4?{O0XzcmmrF^b0X;?}^ak-$insa}C#1Tv8Q7Q)SsaGK|E8qP2{W3QqU- z3m&zG4pF=(kmwavUu?HUUAO%#stuURY_V)VV6fHM#Y*sq^T(YKajkq+f|pbiVBkM2-udVQUGShuk9 zJX_h6_H5(P-zFz{RqKZqPWcgswi$vRj5%^x3_hAh3>3nhaOw2g#%)p4i5I!vKP1CV zrRew8qsWBL!xut}ljLcB#(bj3{eR4R4OD>u2!H?xfB*=900@8p2!H?xfWU+h$j41McV(Jkmdg5%b43qefmBd^@>K^<;hJ< zH+Vs3y$s_EakZDoz-y-T$g>#UwoOEy#Yf9@nr2z*v-hm`m2pN8SNEd-?PXlk;Y-Z1 z?=HR9H||^8(8L;F28b_H$9;|Nro>cafxML;x$!8AyFyPktP8-fYJYZ)=N`p*^-FFW zLZ_`rvO%sTLepJb(Kx-LYNE8KSXYeE7b2X}?HOf5jk{EcN>&-pRTCaad)7Tk+&DFo zVl+zq=N7vJQ(; zBY7j%Is4Mlx#!dL%>s3_78b6Z#1#@x?My)Lz;+$&6Dt_2gZ)QCwcWx5HJBv7c$9lC zO>;!3LYPptN(Z@}UYYEw3$Zc}*OiI7Tey{*vH+3==$Cnm=wHm7_Xe29#ZvBM*b@4^GCy{r^w? zN&pjp00@8p2!H?xfB*=900@8p2!OydCxGYwXRZPW00JNY0w4eaAOHd&00JNY0w4ea zPm2IWCOS(#XP(xCmeaLAOHd&00JNY0w4eaAOHd&00JQJR0!by|EXZc cBp?6+AOHd&00JNY0w4eaAOHd&@JtE(7ZR1--~a#s -- Gitee From faf9647aa91fa9d0434a0c1d77acffe624afe646 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=AD=E6=98=8E=E9=94=8B?= Date: Fri, 9 Apr 2021 22:09:18 +0800 Subject: [PATCH 4/8] 1 --- src/OSharp.CodeGeneration/Services/Entities/CodeTemplate.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/OSharp.CodeGeneration/Services/Entities/CodeTemplate.cs b/src/OSharp.CodeGeneration/Services/Entities/CodeTemplate.cs index b8cd397..f3e1f36 100644 --- a/src/OSharp.CodeGeneration/Services/Entities/CodeTemplate.cs +++ b/src/OSharp.CodeGeneration/Services/Entities/CodeTemplate.cs @@ -109,7 +109,6 @@ namespace OSharp.CodeGeneration.Services.Entities return typeof(ng_AlainComponentHtml); case "ng_Alain其他数据": return typeof(ng_AlainOther); - return null; default: return null; } -- Gitee From c76f694c023dd1f0f11df6e30a42338281944440 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=AD=E6=98=8E=E9=94=8B?= Date: Sat, 10 Apr 2021 11:38:20 +0800 Subject: [PATCH 5/8] =?UTF-8?q?=E5=87=86=E5=A4=87=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E4=B8=AA=E7=95=8C=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Views/Entities/EntityListView.xaml | 14 +++- .../Views/Entities/EntityViewModel.cs | 25 ++++-- .../Views/Properties/PropertyListView.xaml | 74 ++++++++++++++++ .../Views/Properties/PropertyListView.xaml.cs | 28 +++++++ .../Views/Properties/PropertyListViewModel.cs | 84 +++++++++++++++++++ .../Views/Properties/PropertyViewModel.cs | 18 ++++ 6 files changed, 234 insertions(+), 9 deletions(-) create mode 100644 src/OSharp.CodeGenerator/Views/Properties/PropertyListView.xaml create mode 100644 src/OSharp.CodeGenerator/Views/Properties/PropertyListView.xaml.cs diff --git a/src/OSharp.CodeGenerator/Views/Entities/EntityListView.xaml b/src/OSharp.CodeGenerator/Views/Entities/EntityListView.xaml index 858813a..1b9fa37 100644 --- a/src/OSharp.CodeGenerator/Views/Entities/EntityListView.xaml +++ b/src/OSharp.CodeGenerator/Views/Entities/EntityListView.xaml @@ -7,6 +7,7 @@ xmlns:s="https://github.com/canton7/Stylet" xmlns:iconPacks="http://metro.mahapps.com/winfx/xaml/iconpacks" xmlns:local="clr-namespace:OSharp.CodeGenerator.Views.Entities" + xmlns:viewsProperty="clr-namespace:OSharp.CodeGenerator.Views.Properties" mc:Ignorable="d" d:DesignHeight="700" d:DesignWidth="1280" d:DataContext="{d:DesignInstance local:EntityListViewModel}"> @@ -36,14 +37,14 @@ - + - + - + @@ -94,7 +95,12 @@ + + + + + - + diff --git a/src/OSharp.CodeGenerator/Views/Entities/EntityViewModel.cs b/src/OSharp.CodeGenerator/Views/Entities/EntityViewModel.cs index de83ac9..9da542a 100644 --- a/src/OSharp.CodeGenerator/Views/Entities/EntityViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Entities/EntityViewModel.cs @@ -8,9 +8,13 @@ // ----------------------------------------------------------------------- using System; +using System.Windows; +using System.Windows.Controls; using FluentValidation; +using MahApps.Metro.Controls; + using OSharp.CodeGeneration.Services.Entities; using OSharp.CodeGenerator.Data; using OSharp.CodeGenerator.Views.Modules; @@ -39,7 +43,7 @@ namespace OSharp.CodeGenerator.Views.Entities } public ModuleViewModel Module { get; set; } - + public Guid Id { get; set; } public string Name { get; set; } @@ -76,14 +80,24 @@ namespace OSharp.CodeGenerator.Views.Entities return entity; } - public void Expanded() + public void Expanded(RoutedEventArgs args) { - Helper.Output($"“{Name}” - Expanded"); + Expander expander = args.Source as Expander; + DataGrid grid = expander.TryFindParent(); + if (expander != null) + { + grid?.SetDetailsVisibilityForItem(this, Visibility.Hidden); + } } - public void Collapsed() + public void Collapsed(RoutedEventArgs args) { - Helper.Output($"“{Name}” - Collapsed"); + Expander expander = args.Source as Expander; + DataGrid grid = expander.TryFindParent(); + if (expander != null) + { + grid?.SetDetailsVisibilityForItem(this, Visibility.Collapsed); + } } public void ForeignKey() @@ -100,6 +114,7 @@ namespace OSharp.CodeGenerator.Views.Entities { Helper.Output($"“{Name}” - Down"); } + public void Delete() { Helper.Output($"“{Name}” - Delete"); diff --git a/src/OSharp.CodeGenerator/Views/Properties/PropertyListView.xaml b/src/OSharp.CodeGenerator/Views/Properties/PropertyListView.xaml new file mode 100644 index 0000000..c485b20 --- /dev/null +++ b/src/OSharp.CodeGenerator/Views/Properties/PropertyListView.xaml @@ -0,0 +1,74 @@ + + + + + + diff --git a/src/OSharp.CodeGenerator/Views/Properties/PropertyListView.xaml.cs b/src/OSharp.CodeGenerator/Views/Properties/PropertyListView.xaml.cs new file mode 100644 index 0000000..5a7ec71 --- /dev/null +++ b/src/OSharp.CodeGenerator/Views/Properties/PropertyListView.xaml.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +namespace OSharp.CodeGenerator.Views.Properties +{ + /// + /// PropertyListView.xaml 的交互逻辑 + /// + public partial class PropertyListView : UserControl + { + public PropertyListView() + { + InitializeComponent(); + } + } +} diff --git a/src/OSharp.CodeGenerator/Views/Properties/PropertyListViewModel.cs b/src/OSharp.CodeGenerator/Views/Properties/PropertyListViewModel.cs index d999257..ba5eced 100644 --- a/src/OSharp.CodeGenerator/Views/Properties/PropertyListViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Properties/PropertyListViewModel.cs @@ -8,6 +8,20 @@ // ----------------------------------------------------------------------- using System; +using System.Collections.Generic; +using System.Linq; + +using Microsoft.Extensions.DependencyInjection; + +using Notifications.Wpf.Core; + +using OSharp.CodeGeneration.Services; +using OSharp.CodeGeneration.Services.Entities; +using OSharp.CodeGenerator.Data; +using OSharp.CodeGenerator.Views.Entities; +using OSharp.Data; +using OSharp.Exceptions; +using OSharp.Mapping; using Stylet; @@ -22,5 +36,75 @@ namespace OSharp.CodeGenerator.Views.Properties { _provider = provider; } + + public EntityViewModel Entity { get; set; } + + public IObservableCollection Properties { get; set; } = new BindableCollection(); + + public void Init() + { + if (Entity == null) + { + throw new OsharpException("当前实体为空,请选择一个实体"); + } + + List properties = new List(); + _provider.ExecuteScopedWork(provider => + { + IDataContract contract = provider.GetRequiredService(); + properties = contract.CodeProperties.Where(m => m.EntityId == Entity.Id).OrderBy(m => m.Order).ToList(); + }); + Properties.Clear(); + foreach (CodeProperty property in properties) + { + PropertyViewModel model = _provider.GetRequiredService(); + model = property.MapTo(model); + model.Entity = Entity; + Properties.Add(model); + } + Helper.Output($"实体“{Entity.Display}”的属性列表刷新成功,共{Properties.Count}个属性"); + } + + public void New() + { + PropertyViewModel property = _provider.GetRequiredService(); + property.Entity = Entity; + Properties.Add(property); + } + + public bool CanSave => Properties.All(m => !m.HasErrors); + + public async void Save() + { + if (!CanSave) + { + Helper.Notify("属性信息验证失败", NotificationType.Warning); + return; + } + + CodeProperty[] properties = Properties.Select(m => m.ToProperty()).ToArray(); + OperationResult result = null; + await _provider.ExecuteScopedWorkAsync(async provider => + { + IDataContract contract = provider.GetRequiredService(); + result = await contract.UpdateCodeProperties(properties); + }); + Helper.Notify(result); + if (!result.Succeeded) + { + return; + } + Init(); + } + + /// + /// Called whenever the error state of any properties changes. Calls NotifyOfPropertyChange("HasErrors") by default + /// + /// List of property names which have changed validation state + protected override void OnValidationStateChanged(IEnumerable changedProperties) + { + base.OnValidationStateChanged(changedProperties); + NotifyOfPropertyChange(() => CanSave); + } } } diff --git a/src/OSharp.CodeGenerator/Views/Properties/PropertyViewModel.cs b/src/OSharp.CodeGenerator/Views/Properties/PropertyViewModel.cs index ad20820..fd1baf8 100644 --- a/src/OSharp.CodeGenerator/Views/Properties/PropertyViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Properties/PropertyViewModel.cs @@ -10,6 +10,7 @@ using FluentValidation; using OSharp.CodeGeneration.Services.Entities; +using OSharp.CodeGenerator.Data; using OSharp.CodeGenerator.Views.Entities; using OSharp.Mapping; @@ -54,6 +55,8 @@ namespace OSharp.CodeGenerator.Views.Properties public bool IsNullable { get; set; } + public bool IsReadonly { get; set; } + public bool IsVirtual { get; set; } public bool IsForeignKey { get; set; } @@ -77,6 +80,21 @@ namespace OSharp.CodeGenerator.Views.Properties CodeProperty property = this.MapTo(); return property; } + + public void Up() + { + Helper.Output($"“{Name}” - Up"); + } + + public void Down() + { + Helper.Output($"“{Name}” - Down"); + } + + public void Delete() + { + Helper.Output($"“{Name}” - Delete"); + } } -- Gitee From f0bc1ddae271973eacb3e1f49f7667e255a53875 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=AD=E6=98=8E=E9=94=8B?= Date: Sat, 10 Apr 2021 18:23:26 +0800 Subject: [PATCH 6/8] =?UTF-8?q?=E8=8F=9C=E5=8D=95=E5=AF=BC=E8=88=AA?= =?UTF-8?q?=E6=94=B9=E9=80=A0=E5=AE=8C=E6=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Services/DataService.CodeEntity.cs | 2 +- .../Services/DataService.CodeModule.cs | 54 ++--- .../Services/DataService.CodeProject.cs | 6 +- .../Services/DataService.CodeProperty.cs | 2 +- .../Services/IDataContract.cs | 9 +- src/OSharp.CodeGenerator/Data/Extensions.cs | 51 +++++ .../OSharp.CodeGenerator.csproj | 2 +- .../Views/Entities/EntityListView.xaml | 126 ++++++------ .../Views/Entities/EntityListViewModel.cs | 17 +- .../Views/Entities/EntityViewModel.cs | 22 +- .../Views/MainMenuView.xaml | 32 +-- src/OSharp.CodeGenerator/Views/MainView.xaml | 10 +- .../Views/MainViewModel.cs | 7 +- src/OSharp.CodeGenerator/Views/MenuView.xaml | 40 ++++ ...oduleEditView.xaml.cs => MenuView.xaml.cs} | 10 +- .../Views/MenuViewModel.cs | 188 ++++++++++++++++++ .../Views/Modules/ModuleEditView.xaml | 44 ---- .../Views/Modules/ModuleListView.xaml | 64 +++--- .../Views/Modules/ModuleListViewModel.cs | 61 ++++-- .../Views/Modules/ModuleViewModel.cs | 61 +----- .../Views/Projects/ProjectEditView.xaml | 6 +- .../Views/Projects/ProjectListView.xaml | 14 +- .../Views/Projects/ProjectViewModel.cs | 6 +- .../Views/Properties/PropertyListView.xaml | 160 +++++++++------ .../Views/Properties/PropertyListViewModel.cs | 19 +- .../Views/ViewModelLocator.cs | 67 +++++++ 26 files changed, 676 insertions(+), 404 deletions(-) create mode 100644 src/OSharp.CodeGenerator/Data/Extensions.cs create mode 100644 src/OSharp.CodeGenerator/Views/MenuView.xaml rename src/OSharp.CodeGenerator/Views/{Modules/ModuleEditView.xaml.cs => MenuView.xaml.cs} (71%) create mode 100644 src/OSharp.CodeGenerator/Views/MenuViewModel.cs delete mode 100644 src/OSharp.CodeGenerator/Views/Modules/ModuleEditView.xaml diff --git a/src/OSharp.CodeGeneration/Services/DataService.CodeEntity.cs b/src/OSharp.CodeGeneration/Services/DataService.CodeEntity.cs index a6f182d..9f69987 100644 --- a/src/OSharp.CodeGeneration/Services/DataService.CodeEntity.cs +++ b/src/OSharp.CodeGeneration/Services/DataService.CodeEntity.cs @@ -83,7 +83,7 @@ namespace OSharp.CodeGeneration.Services await UnitOfWork.CommitAsync(); return names.Count > 0 - ? new OperationResult(OperationResultType.Success, $"实体“{names.ExpandAndToString()}”更新成功") + ? new OperationResult(OperationResultType.Success, $"实体“{names.ExpandAndToString()}”保存成功") : OperationResult.NoChanged; } diff --git a/src/OSharp.CodeGeneration/Services/DataService.CodeModule.cs b/src/OSharp.CodeGeneration/Services/DataService.CodeModule.cs index d53819a..e6c340e 100644 --- a/src/OSharp.CodeGeneration/Services/DataService.CodeModule.cs +++ b/src/OSharp.CodeGeneration/Services/DataService.CodeModule.cs @@ -39,43 +39,7 @@ namespace OSharp.CodeGeneration.Services { return ModuleRepository.CheckExistsAsync(predicate, id); } - - /// - /// 添加代码模块信息信息 - /// - /// 要添加的代码模块信息 - /// 业务操作结果 - public async Task CreateCodeModules(params CodeModule[] modules) - { - List names = new List(); - UnitOfWork.EnableTransaction(); - foreach (CodeModule module in modules) - { - module.Validate(); - CodeProject project = await ProjectRepository.GetAsync(module.ProjectId); - if (project == null) - { - return new OperationResult(OperationResultType.Error, $"编号为“{module.ProjectId}”的项目信息不存在"); - } - - if (await CheckCodeModuleExists(m => m.Name == module.Name && m.ProjectId == module.ProjectId)) - { - return new OperationResult(OperationResultType.Error, $"项目“{project.Name}”中名称为“{module.Name}”的模块信息已存在"); - } - - int count = await ModuleRepository.InsertAsync(module); - if (count > 0) - { - names.Add(module.Name); - } - } - - await UnitOfWork.CommitAsync(); - return names.Count > 0 - ? new OperationResult(OperationResultType.Success, $"模块“{names.ExpandAndToString()}”创建成功") - : OperationResult.NoChanged; - } - + /// /// 更新代码模块信息信息 /// @@ -99,9 +63,17 @@ namespace OSharp.CodeGeneration.Services return new OperationResult(OperationResultType.Error, $"项目“{project.Name}”中名称为“{module.Name}”的模块信息已存在"); } - CodeModule existing = await ModuleRepository.GetAsync(module.Id); - existing = module.MapTo(existing); - int count = await ModuleRepository.UpdateAsync(existing); + int count; + if (module.Id == default) + { + count = await ModuleRepository.InsertAsync(module); + } + else + { + CodeModule existing = await ModuleRepository.GetAsync(module.Id); + existing = module.MapTo(existing); + count = await ModuleRepository.UpdateAsync(existing); + } if (count > 0) { names.Add(module.Name); @@ -110,7 +82,7 @@ namespace OSharp.CodeGeneration.Services await UnitOfWork.CommitAsync(); return names.Count > 0 - ? new OperationResult(OperationResultType.Success, $"模块“{names.ExpandAndToString()}”更新成功") + ? new OperationResult(OperationResultType.Success, $"模块“{names.ExpandAndToString()}”保存成功") : OperationResult.NoChanged; } diff --git a/src/OSharp.CodeGeneration/Services/DataService.CodeProject.cs b/src/OSharp.CodeGeneration/Services/DataService.CodeProject.cs index c77e728..17573ce 100644 --- a/src/OSharp.CodeGeneration/Services/DataService.CodeProject.cs +++ b/src/OSharp.CodeGeneration/Services/DataService.CodeProject.cs @@ -43,11 +43,11 @@ namespace OSharp.CodeGeneration.Services projects = json.FromJsonString(); foreach (CodeProject project in projects) { - foreach (CodeModule module in project.Modules) + foreach (CodeModule module in project.Modules.OrderBy(m => m.Order)) { - foreach (CodeEntity entity in module.Entities) + foreach (CodeEntity entity in module.Entities.OrderBy(m => m.Order)) { - foreach (CodeProperty property in entity.Properties) + foreach (CodeProperty property in entity.Properties.OrderBy(m => m.Order)) { property.Entity = entity; } diff --git a/src/OSharp.CodeGeneration/Services/DataService.CodeProperty.cs b/src/OSharp.CodeGeneration/Services/DataService.CodeProperty.cs index 9b778dc..2ae4d58 100644 --- a/src/OSharp.CodeGeneration/Services/DataService.CodeProperty.cs +++ b/src/OSharp.CodeGeneration/Services/DataService.CodeProperty.cs @@ -83,7 +83,7 @@ namespace OSharp.CodeGeneration.Services await UnitOfWork.CommitAsync(); return names.Count > 0 - ? new OperationResult(OperationResultType.Success, $"属性“{names.ExpandAndToString()}”更新成功") + ? new OperationResult(OperationResultType.Success, $"属性“{names.ExpandAndToString()}”保存成功") : OperationResult.NoChanged; } diff --git a/src/OSharp.CodeGeneration/Services/IDataContract.cs b/src/OSharp.CodeGeneration/Services/IDataContract.cs index d6499ac..b4e3bf1 100644 --- a/src/OSharp.CodeGeneration/Services/IDataContract.cs +++ b/src/OSharp.CodeGeneration/Services/IDataContract.cs @@ -82,14 +82,7 @@ namespace OSharp.CodeGeneration.Services /// 更新的代码模块信息编号 /// 代码模块信息是否存在 Task CheckCodeModuleExists(Expression> predicate, Guid id = default); - - /// - /// 添加代码模块信息信息 - /// - /// 要添加的代码模块信息 - /// 业务操作结果 - Task CreateCodeModules(params CodeModule[] modules); - + /// /// 更新代码模块信息信息 /// diff --git a/src/OSharp.CodeGenerator/Data/Extensions.cs b/src/OSharp.CodeGenerator/Data/Extensions.cs new file mode 100644 index 0000000..3d22162 --- /dev/null +++ b/src/OSharp.CodeGenerator/Data/Extensions.cs @@ -0,0 +1,51 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +using OSharp.CodeGeneration.Services.Entities; +using OSharp.CodeGenerator.Views.Entities; +using OSharp.CodeGenerator.Views.Modules; +using OSharp.CodeGenerator.Views.Projects; +using OSharp.CodeGenerator.Views.Properties; +using OSharp.Mapping; +using OSharp.Wpf.Stylet; + + +namespace OSharp.CodeGenerator.Data +{ + public static class Extensions + { + public static ProjectViewModel ToViewModel(this CodeProject project) + { + ProjectViewModel model = IoC.Get(); + model = project.MapTo(model); + return model; + } + + public static ModuleViewModel ToViewModel(this CodeModule module, ProjectViewModel projectModel = null) + { + ModuleViewModel model = IoC.Get(); + model = module.MapTo(model); + model.Project = projectModel; + return model; + } + + public static EntityViewModel ToViewModel(this CodeEntity entity, ModuleViewModel moduleModel = null) + { + EntityViewModel model = IoC.Get(); + model = entity.MapTo(model); + model.Module = moduleModel; + return model; + } + + public static PropertyViewModel ToViewModel(this CodeProperty property, EntityViewModel entityModel = null) + { + PropertyViewModel model = IoC.Get(); + model = property.MapTo(model); + model.Entity = entityModel; + return model; + } + } +} diff --git a/src/OSharp.CodeGenerator/OSharp.CodeGenerator.csproj b/src/OSharp.CodeGenerator/OSharp.CodeGenerator.csproj index 3fc9cd7..0e7421a 100644 --- a/src/OSharp.CodeGenerator/OSharp.CodeGenerator.csproj +++ b/src/OSharp.CodeGenerator/OSharp.CodeGenerator.csproj @@ -1,4 +1,4 @@ - + WinExe diff --git a/src/OSharp.CodeGenerator/Views/Entities/EntityListView.xaml b/src/OSharp.CodeGenerator/Views/Entities/EntityListView.xaml index 1b9fa37..bfcbef9 100644 --- a/src/OSharp.CodeGenerator/Views/Entities/EntityListView.xaml +++ b/src/OSharp.CodeGenerator/Views/Entities/EntityListView.xaml @@ -5,7 +5,7 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:s="https://github.com/canton7/Stylet" - xmlns:iconPacks="http://metro.mahapps.com/winfx/xaml/iconpacks" + xmlns:icons="http://metro.mahapps.com/winfx/xaml/iconpacks" xmlns:local="clr-namespace:OSharp.CodeGenerator.Views.Entities" xmlns:viewsProperty="clr-namespace:OSharp.CodeGenerator.Views.Properties" mc:Ignorable="d" @@ -15,92 +15,78 @@ - 实体列表 + 实体列表 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/OSharp.CodeGenerator/Views/Entities/EntityListViewModel.cs b/src/OSharp.CodeGenerator/Views/Entities/EntityListViewModel.cs index da5886b..ac643fb 100644 --- a/src/OSharp.CodeGenerator/Views/Entities/EntityListViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Entities/EntityListViewModel.cs @@ -9,7 +9,9 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using System.Linq; +using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; @@ -43,18 +45,21 @@ namespace OSharp.CodeGenerator.Views.Entities public IObservableCollection Entities { get; } = new BindableCollection(); - public void Init() + public bool IsShow { get; set; } + + public async void Init() { if (Module == null) { throw new OsharpException($"当前模块为空,请点击模块列表选择一行"); } - + List entities = new List(); - _provider.ExecuteScopedWork(provider => + await _provider.ExecuteScopedWorkAsync(provider => { IDataContract contract = provider.GetRequiredService(); entities = contract.CodeEntities.Where(m => m.ModuleId == Module.Id).OrderBy(m => m.Order).ToList(); + return Task.CompletedTask; }); Entities.Clear(); foreach (CodeEntity entity in entities) @@ -64,6 +69,7 @@ namespace OSharp.CodeGenerator.Views.Entities model.Module = Module; Entities.Add(model); } + Helper.Output($"模块“{Module.Display}”的实体列表刷新成功,共{Entities.Count}个实体"); } @@ -84,6 +90,11 @@ namespace OSharp.CodeGenerator.Views.Entities return; } + for (int i = 0; i < Entities.Count; i++) + { + Entities[i].Order = i + 1; + } + CodeEntity[] entities = Entities.Select(m => m.ToEntity()).ToArray(); OperationResult result = null; await _provider.ExecuteScopedWorkAsync(async provider => diff --git a/src/OSharp.CodeGenerator/Views/Entities/EntityViewModel.cs b/src/OSharp.CodeGenerator/Views/Entities/EntityViewModel.cs index 9da542a..618bd19 100644 --- a/src/OSharp.CodeGenerator/Views/Entities/EntityViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Entities/EntityViewModel.cs @@ -79,27 +79,7 @@ namespace OSharp.CodeGenerator.Views.Entities CodeEntity entity = this.MapTo(); return entity; } - - public void Expanded(RoutedEventArgs args) - { - Expander expander = args.Source as Expander; - DataGrid grid = expander.TryFindParent(); - if (expander != null) - { - grid?.SetDetailsVisibilityForItem(this, Visibility.Hidden); - } - } - - public void Collapsed(RoutedEventArgs args) - { - Expander expander = args.Source as Expander; - DataGrid grid = expander.TryFindParent(); - if (expander != null) - { - grid?.SetDetailsVisibilityForItem(this, Visibility.Collapsed); - } - } - + public void ForeignKey() { Helper.Output($"“{Name}” - ForeignKey"); diff --git a/src/OSharp.CodeGenerator/Views/MainMenuView.xaml b/src/OSharp.CodeGenerator/Views/MainMenuView.xaml index 7407456..23662b2 100644 --- a/src/OSharp.CodeGenerator/Views/MainMenuView.xaml +++ b/src/OSharp.CodeGenerator/Views/MainMenuView.xaml @@ -5,7 +5,7 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:OSharp.CodeGenerator.Views" - xmlns:iconPacks="http://metro.mahapps.com/winfx/xaml/iconpacks" + xmlns:icons="http://metro.mahapps.com/winfx/xaml/iconpacks" xmlns:s="https://github.com/canton7/Stylet" mc:Ignorable="d" d:DataContext="{d:DesignInstance local:MainMenuViewModel}" @@ -14,59 +14,59 @@ diff --git a/src/OSharp.CodeGenerator/Views/MainView.xaml b/src/OSharp.CodeGenerator/Views/MainView.xaml index 614a0af..f000269 100644 --- a/src/OSharp.CodeGenerator/Views/MainView.xaml +++ b/src/OSharp.CodeGenerator/Views/MainView.xaml @@ -9,9 +9,10 @@ xmlns:viewsProjects="clr-namespace:OSharp.CodeGenerator.Views.Projects" xmlns:viewsModules="clr-namespace:OSharp.CodeGenerator.Views.Modules" xmlns:viewsEntities="clr-namespace:OSharp.CodeGenerator.Views.Entities" + xmlns:viewsProperties="clr-namespace:OSharp.CodeGenerator.Views.Properties" xmlns:mah="http://metro.mahapps.com/winfx/xaml/controls" xmlns:mahwin="http://metro.mahapps.com/winfx/xaml/simplechildwindow" - xmlns:iconPacks="http://metro.mahapps.com/winfx/xaml/iconpacks" + xmlns:icons="http://metro.mahapps.com/winfx/xaml/iconpacks" xmlns:notify="clr-namespace:Notifications.Wpf.Core.Controls;assembly=Notifications.Wpf.Core" mc:Ignorable="d" d:DataContext="{d:DesignInstance views:MainViewModel}" @@ -34,13 +35,14 @@ - + - + + + - diff --git a/src/OSharp.CodeGenerator/Views/MainViewModel.cs b/src/OSharp.CodeGenerator/Views/MainViewModel.cs index 57a8580..a8c9248 100644 --- a/src/OSharp.CodeGenerator/Views/MainViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/MainViewModel.cs @@ -13,6 +13,7 @@ using Notifications.Wpf.Core.Controls; using OSharp.CodeGenerator.Views.Entities; using OSharp.CodeGenerator.Views.Modules; using OSharp.CodeGenerator.Views.Projects; +using OSharp.CodeGenerator.Views.Properties; using OSharp.Wpf.Stylet; using Stylet; @@ -33,17 +34,21 @@ namespace OSharp.CodeGenerator.Views DisplayName = "OSharp代码生成器"; _notificationManager = new NotificationManager(NotificationPosition.BottomRight); } - + public MainMenuViewModel MainMenu { get; set; } = IoC.Get(); public StatusBarViewModel StatusBar { get; set; } = IoC.Get(); public ProjectListViewModel ProjectList { get; set; } = IoC.Get(); + public MenuViewModel Menu { get; set; } = IoC.Get(); + public ModuleListViewModel ModuleList { get; set; } = IoC.Get(); public EntityListViewModel EntityList { get; set; } = IoC.Get(); + public PropertyListViewModel PropertyList { get; set; } = IoC.Get(); + public async void Notify(string message, NotificationType type = NotificationType.Information, string title = "消息提示") { NotificationContent content = new NotificationContent() diff --git a/src/OSharp.CodeGenerator/Views/MenuView.xaml b/src/OSharp.CodeGenerator/Views/MenuView.xaml new file mode 100644 index 0000000..bf03650 --- /dev/null +++ b/src/OSharp.CodeGenerator/Views/MenuView.xaml @@ -0,0 +1,40 @@ + + + + + + 导航菜单 + + + + + + + + + + + + + + + + + + diff --git a/src/OSharp.CodeGenerator/Views/Modules/ModuleEditView.xaml.cs b/src/OSharp.CodeGenerator/Views/MenuView.xaml.cs similarity index 71% rename from src/OSharp.CodeGenerator/Views/Modules/ModuleEditView.xaml.cs rename to src/OSharp.CodeGenerator/Views/MenuView.xaml.cs index e2a1566..d83f86a 100644 --- a/src/OSharp.CodeGenerator/Views/Modules/ModuleEditView.xaml.cs +++ b/src/OSharp.CodeGenerator/Views/MenuView.xaml.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -13,14 +13,14 @@ using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; -namespace OSharp.CodeGenerator.Views.Modules +namespace OSharp.CodeGenerator.Views { /// - /// ModuleEditView.xaml 的交互逻辑 + /// NavView.xaml 的交互逻辑 /// - public partial class ModuleEditView : UserControl + public partial class MenuView : UserControl { - public ModuleEditView() + public MenuView() { InitializeComponent(); } diff --git a/src/OSharp.CodeGenerator/Views/MenuViewModel.cs b/src/OSharp.CodeGenerator/Views/MenuViewModel.cs new file mode 100644 index 0000000..39844a7 --- /dev/null +++ b/src/OSharp.CodeGenerator/Views/MenuViewModel.cs @@ -0,0 +1,188 @@ +// ----------------------------------------------------------------------- +// +// Copyright (c) 2014-2021 OSharp. All rights reserved. +// +// http://www.osharp.org +// 郭明锋 +// 2021-04-10 11:52 +// ----------------------------------------------------------------------- + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Windows; +using System.Windows.Controls; + +using JetBrains.Annotations; + +using MahApps.Metro.IconPacks; + +using Microsoft.Extensions.DependencyInjection; + +using OSharp.CodeGeneration.Services; +using OSharp.CodeGeneration.Services.Entities; +using OSharp.CodeGenerator.Data; +using OSharp.CodeGenerator.Views.Entities; +using OSharp.CodeGenerator.Views.Modules; +using OSharp.CodeGenerator.Views.Projects; +using OSharp.CodeGenerator.Views.Properties; +using OSharp.Exceptions; +using OSharp.Wpf.Stylet; + +using Stylet; + + +namespace OSharp.CodeGenerator.Views +{ + [Singleton] + public class MenuViewModel : Screen + { + private readonly IServiceProvider _provider; + + public MenuViewModel(IServiceProvider provider) + { + _provider = provider; + } + + public ProjectViewModel Project { get; set; } + + public IObservableCollection MenuItems { get; set; } = new BindableCollection(); + + public Screen SelectModel { get; set; } + + public void Init() + { + if (Project == null) + { + throw new OsharpException("当前项目为空,请先通过菜单“项目-项目管理”加载项目"); + } + + CodeProject[] projects = null; + _provider.ExecuteScopedWork(provider => + { + IDataContract contract = provider.GetRequiredService(); + projects = contract.GetCodeProject(m => m.Name == Project.Name); + }); + if (projects == null) + { + throw new OsharpException($"名称为“{Project.Name}”的项目信息不存在"); + } + + MenuItems.Clear(); + foreach (CodeProject project in projects) + { + MenuItems.Add(ToMenu(project)); + } + } + + public void Select(RoutedPropertyChangedEventArgs args) + { + if (args.NewValue is not MenuItem item) + { + return; + } + + SelectModel = item.Screen; + MainViewModel main = IoC.Get(); + main.ModuleList.IsShow = SelectModel is ProjectViewModel; + main.EntityList.IsShow = SelectModel is ModuleViewModel; + main.PropertyList.IsShow = SelectModel is EntityViewModel; + switch (SelectModel) + { + case ProjectViewModel project: + ModuleListViewModel list1 = IoC.Get(); + list1.Project = project; + list1.Init(); + break; + case ModuleViewModel module: + EntityListViewModel list2 = IoC.Get(); + list2.Module = module; + list2.Init(); + break; + case EntityViewModel entity: + PropertyListViewModel list3 = IoC.Get(); + list3.Entity = entity; + list3.Init(); + break; + } + } + + private MenuItem ToMenu(CodeProject project) + { + MenuItem projectMenu = _provider.GetRequiredService(); + projectMenu.Id = project.Id; + projectMenu.Text = $"{project.Name}[{project.NamespacePrefix}]"; + projectMenu.Type = MenuItemType.Project; + projectMenu.Icon = PackIconMaterialKind.AlphaPBoxOutline; + ProjectViewModel projectModel = project.ToViewModel(); + projectMenu.Screen = projectModel; + foreach (CodeModule module in project.Modules) + { + MenuItem moduleMenu = _provider.GetRequiredService(); + moduleMenu.Id = module.Id; + moduleMenu.Text = $"{module.Display}[{module.Name}]"; + moduleMenu.Type = MenuItemType.Module; + moduleMenu.Icon = PackIconMaterialKind.AlphaMBoxOutline; + ModuleViewModel moduleModel = module.ToViewModel(projectModel); + moduleMenu.Screen = moduleModel; + foreach (CodeEntity entity in module.Entities) + { + MenuItem entityMenu = _provider.GetRequiredService(); + entityMenu.Id = entity.Id; + entityMenu.Text = $"{entity.Display}[{entity.Name}]"; + entityMenu.Type = MenuItemType.Entity; + entityMenu.Icon = PackIconMaterialKind.AlphaEBoxOutline; + EntityViewModel entityModel = entity.ToViewModel(moduleModel); + entityMenu.Screen = entityModel; + moduleMenu.ItemMenus.Add(entityMenu); + } + projectMenu.ItemMenus.Add(moduleMenu); + } + + return projectMenu; + } + } + + + public class MenuItem : Screen + { + public Guid Id { get; set; } + + /// + /// 获取或设置 显示 + /// + public string Text { get; set; } + + /// + /// 获取或设置 图标 + /// + public PackIconMaterialKind Icon { get; set; } + + /// + /// 获取或设置 节点类型 + /// + public MenuItemType Type { get; set; } + + /// + /// 获取或设置 当前关联视图模型 + /// + public Screen Screen { get; set; } + + /// + /// 获取或设置 子节点集合 + /// + public IObservableCollection ItemMenus { get; set; } = new BindableCollection(); + } + + + public enum MenuItemType + { + Project, + + Module, + + Entity, + + Property + } +} diff --git a/src/OSharp.CodeGenerator/Views/Modules/ModuleEditView.xaml b/src/OSharp.CodeGenerator/Views/Modules/ModuleEditView.xaml deleted file mode 100644 index 77e65ef..0000000 --- a/src/OSharp.CodeGenerator/Views/Modules/ModuleEditView.xaml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/src/OSharp.CodeGenerator/Views/Modules/ModuleListView.xaml b/src/OSharp.CodeGenerator/Views/Modules/ModuleListView.xaml index fcc35c5..cc681a1 100644 --- a/src/OSharp.CodeGenerator/Views/Modules/ModuleListView.xaml +++ b/src/OSharp.CodeGenerator/Views/Modules/ModuleListView.xaml @@ -5,57 +5,63 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:s="https://github.com/canton7/Stylet" - xmlns:iconPacks="http://metro.mahapps.com/winfx/xaml/iconpacks" + xmlns:icons="http://metro.mahapps.com/winfx/xaml/iconpacks" xmlns:local="clr-namespace:OSharp.CodeGenerator.Views.Modules" mc:Ignorable="d" - d:DesignHeight="700" d:DesignWidth="200" + d:DesignHeight="700" d:DesignWidth="1000" d:DataContext="{d:DesignInstance local:ModuleListViewModel}"> - 模块列表 + 模块列表 + - - - - - - - - - - - - [] - - - + - - - - - - - + + + + + + diff --git a/src/OSharp.CodeGenerator/Views/Modules/ModuleListViewModel.cs b/src/OSharp.CodeGenerator/Views/Modules/ModuleListViewModel.cs index 27e6134..0bccf71 100644 --- a/src/OSharp.CodeGenerator/Views/Modules/ModuleListViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Modules/ModuleListViewModel.cs @@ -9,16 +9,19 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using System.Linq; -using System.Windows.Controls; +using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; +using Notifications.Wpf.Core; + using OSharp.CodeGeneration.Services; using OSharp.CodeGeneration.Services.Entities; using OSharp.CodeGenerator.Data; -using OSharp.CodeGenerator.Views.Entities; using OSharp.CodeGenerator.Views.Projects; +using OSharp.Data; using OSharp.Exceptions; using OSharp.Mapping; using OSharp.Wpf.Stylet; @@ -42,23 +45,21 @@ namespace OSharp.CodeGenerator.Views.Modules public IObservableCollection Modules { get; } = new BindableCollection(); - public string EditTitle { get; set; } - - public bool IsShowEdit { get; set; } + public bool IsShow { get; set; } = true; - public ModuleViewModel EditingModel { get; set; } - - public void Init() + public async void Init() { if (Project == null) { throw new OsharpException("当前项目为空,请先通过菜单“项目-项目管理”加载项目"); } + List entities = new List(); - _provider.ExecuteScopedWork(provider => + await _provider.ExecuteScopedWorkAsync(provider => { IDataContract contract = provider.GetRequiredService(); entities = contract.CodeModules.Where(m => m.ProjectId == Project.Id).OrderBy(m => m.Order).ToList(); + return Task.CompletedTask; }); Modules.Clear(); foreach (CodeModule entity in entities) @@ -68,6 +69,7 @@ namespace OSharp.CodeGenerator.Views.Modules model.Project = Project; Modules.Add(model); } + Helper.Output($"模块列表刷新成功,共{Modules.Count}个模块"); } @@ -79,28 +81,47 @@ namespace OSharp.CodeGenerator.Views.Modules } ModuleViewModel model = IoC.Get(); model.Project = Project; - EditingModel = model; - EditTitle = $"新增模块,项目:{Project.Name}"; - IsShowEdit = true; + Modules.Add(model); } - public void Select(SelectionChangedEventArgs e) + public bool CanSave => Modules.All(m => !m.HasErrors); + + public async void Save() { - if (e.AddedItems.Count == 0) + if (!CanSave) { + Helper.Notify("模块信息验证失败", NotificationType.Warning); return; } - ModuleViewModel module = e.AddedItems[0] as ModuleViewModel; - if (module == null) + for (int i = 0; i < Modules.Count; i++) + { + Modules[i].Order = i + 1; + } + + CodeModule[] modules = Modules.Select(m => m.ToModule()).ToArray(); + OperationResult result = null; + await _provider.ExecuteScopedWorkAsync(async provider => + { + IDataContract contract = provider.GetRequiredService(); + result = await contract.UpdateCodeModules(modules); + }); + Helper.Notify(result); + if (!result.Succeeded) { return; } + Init(); + } - EntityListViewModel list = IoC.Get(); - list.Module = module; - list.Init(); - Helper.Output($"切换到“{module.Name} [{module.Display}]”模块"); + /// + /// Called whenever the error state of any properties changes. Calls NotifyOfPropertyChange("HasErrors") by default + /// + /// List of property names which have changed validation state + protected override void OnValidationStateChanged(IEnumerable changedProperties) + { + base.OnValidationStateChanged(changedProperties); + NotifyOfPropertyChange(() => CanSave); } } } diff --git a/src/OSharp.CodeGenerator/Views/Modules/ModuleViewModel.cs b/src/OSharp.CodeGenerator/Views/Modules/ModuleViewModel.cs index 126a247..df19c7a 100644 --- a/src/OSharp.CodeGenerator/Views/Modules/ModuleViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Modules/ModuleViewModel.cs @@ -64,15 +64,7 @@ namespace OSharp.CodeGenerator.Views.Modules CodeModule module = this.MapTo(); return module; } - - public void Edit() - { - ModuleListViewModel model = IoC.Get(); - model.EditingModel = this; - model.EditTitle = $"模块编辑 - {Name}[{Display}]"; - model.IsShowEdit = true; - } - + public async void Delete() { if (MessageBox.Show($"是否删除模块“{Name}[{Display}]”?", "请确认", MessageBoxButton.OKCancel, MessageBoxImage.Question) == MessageBoxResult.Cancel) @@ -95,57 +87,6 @@ namespace OSharp.CodeGenerator.Views.Modules main.ModuleList.Init(); } - - public bool CanEditSave => !HasErrors; - - public async void EditSave() - { - MainViewModel main = IoC.Get(); - if (!await ValidateAsync()) - { - main.Notify("项目信息验证失败", NotificationType.Warning); - return; - } - - CodeModule module = ToModule(); - OperationResult result = null; - await _provider.ExecuteScopedWorkAsync(async provider => - { - IDataContract contract = provider.GetRequiredService(); - result = module.Id == default - ? await contract.CreateCodeModules(module) - : await contract.UpdateCodeModules(module); - }); - Helper.Notify(result); - if (!result.Succeeded) - { - return; - } - - ModuleListViewModel list = main.ModuleList; - list.EditingModel = null; - list.IsShowEdit = false; - list.Init(); - } - - public void EditCancel() - { - var list = IoC.Get(); - list.EditingModel = null; - list.IsShowEdit = false; - list.Init(); - } - - /// - /// Called whenever the error state of any properties changes. Calls NotifyOfPropertyChange("HasErrors") by default - /// - /// List of property names which have changed validation state - protected override void OnValidationStateChanged(IEnumerable changedProperties) - { - base.OnValidationStateChanged(changedProperties); - NotifyOfPropertyChange(() => CanEditSave); - } - } diff --git a/src/OSharp.CodeGenerator/Views/Projects/ProjectEditView.xaml b/src/OSharp.CodeGenerator/Views/Projects/ProjectEditView.xaml index e9b8516..7f30f10 100644 --- a/src/OSharp.CodeGenerator/Views/Projects/ProjectEditView.xaml +++ b/src/OSharp.CodeGenerator/Views/Projects/ProjectEditView.xaml @@ -7,7 +7,7 @@ xmlns:s="https://github.com/canton7/Stylet" xmlns:mah="http://metro.mahapps.com/winfx/xaml/controls" xmlns:mahwin="http://metro.mahapps.com/winfx/xaml/simplechildwindow" - xmlns:iconPacks="http://metro.mahapps.com/winfx/xaml/iconpacks" + xmlns:icons="http://metro.mahapps.com/winfx/xaml/iconpacks" xmlns:local="clr-namespace:OSharp.CodeGenerator.Views.Projects" mc:Ignorable="d" d:DesignHeight="450" d:DesignWidth="800" @@ -45,13 +45,13 @@ diff --git a/src/OSharp.CodeGenerator/Views/Projects/ProjectListView.xaml b/src/OSharp.CodeGenerator/Views/Projects/ProjectListView.xaml index a40e421..01289e1 100644 --- a/src/OSharp.CodeGenerator/Views/Projects/ProjectListView.xaml +++ b/src/OSharp.CodeGenerator/Views/Projects/ProjectListView.xaml @@ -7,7 +7,7 @@ xmlns:mah="http://metro.mahapps.com/winfx/xaml/controls" xmlns:s="https://github.com/canton7/Stylet" xmlns:mahwin="http://metro.mahapps.com/winfx/xaml/simplechildwindow" - xmlns:iconPacks="http://metro.mahapps.com/winfx/xaml/iconpacks" + xmlns:icons="http://metro.mahapps.com/winfx/xaml/iconpacks" xmlns:local="clr-namespace:OSharp.CodeGenerator.Views.Projects" mc:Ignorable="d" d:DesignHeight="450" d:DesignWidth="800" @@ -17,17 +17,17 @@ - 项目列表 + 项目列表 @@ -42,19 +42,19 @@ diff --git a/src/OSharp.CodeGenerator/Views/Projects/ProjectViewModel.cs b/src/OSharp.CodeGenerator/Views/Projects/ProjectViewModel.cs index 4cd7f22..b45552c 100644 --- a/src/OSharp.CodeGenerator/Views/Projects/ProjectViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Projects/ProjectViewModel.cs @@ -66,9 +66,9 @@ namespace OSharp.CodeGenerator.Views.Projects { MainViewModel main = IoC.Get(); main.DisplayName = $"OSharp代码生成器 - {Name}"; - ModuleListViewModel moduleList = IoC.Get(); - moduleList.Project = this; - moduleList.Init(); + MenuViewModel menu = IoC.Get(); + menu.Project = this; + menu.Init(); main.ProjectList.IsShow = false; main.StatusBar.Message = $"项目“{Name}”加载成功"; } diff --git a/src/OSharp.CodeGenerator/Views/Properties/PropertyListView.xaml b/src/OSharp.CodeGenerator/Views/Properties/PropertyListView.xaml index c485b20..26cd5d4 100644 --- a/src/OSharp.CodeGenerator/Views/Properties/PropertyListView.xaml +++ b/src/OSharp.CodeGenerator/Views/Properties/PropertyListView.xaml @@ -5,70 +5,110 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mah="http://metro.mahapps.com/winfx/xaml/controls" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" + xmlns:s="https://github.com/canton7/Stylet" + xmlns:icons="http://metro.mahapps.com/winfx/xaml/iconpacks" xmlns:local="clr-namespace:OSharp.CodeGenerator.Views.Properties" mc:Ignorable="d" d:DesignHeight="450" d:DesignWidth="1200" d:DataContext="{d:DesignInstance local:PropertyListViewModel}"> - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/OSharp.CodeGenerator/Views/Properties/PropertyListViewModel.cs b/src/OSharp.CodeGenerator/Views/Properties/PropertyListViewModel.cs index ba5eced..85c7053 100644 --- a/src/OSharp.CodeGenerator/Views/Properties/PropertyListViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Properties/PropertyListViewModel.cs @@ -9,7 +9,9 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using System.Linq; +using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; @@ -22,12 +24,14 @@ using OSharp.CodeGenerator.Views.Entities; using OSharp.Data; using OSharp.Exceptions; using OSharp.Mapping; +using OSharp.Wpf.Stylet; using Stylet; namespace OSharp.CodeGenerator.Views.Properties { + [Singleton] public class PropertyListViewModel : Screen { private readonly IServiceProvider _provider; @@ -41,18 +45,21 @@ namespace OSharp.CodeGenerator.Views.Properties public IObservableCollection Properties { get; set; } = new BindableCollection(); - public void Init() + public bool IsShow { get; set; } + + public async void Init() { if (Entity == null) { throw new OsharpException("当前实体为空,请选择一个实体"); } - + List properties = new List(); - _provider.ExecuteScopedWork(provider => + await _provider.ExecuteScopedWork(provider => { IDataContract contract = provider.GetRequiredService(); properties = contract.CodeProperties.Where(m => m.EntityId == Entity.Id).OrderBy(m => m.Order).ToList(); + return Task.CompletedTask; }); Properties.Clear(); foreach (CodeProperty property in properties) @@ -62,6 +69,7 @@ namespace OSharp.CodeGenerator.Views.Properties model.Entity = Entity; Properties.Add(model); } + Helper.Output($"实体“{Entity.Display}”的属性列表刷新成功,共{Properties.Count}个属性"); } @@ -82,6 +90,11 @@ namespace OSharp.CodeGenerator.Views.Properties return; } + for (int i = 0; i < Properties.Count; i++) + { + Properties[i].Order = i + 1; + } + CodeProperty[] properties = Properties.Select(m => m.ToProperty()).ToArray(); OperationResult result = null; await _provider.ExecuteScopedWorkAsync(async provider => diff --git a/src/OSharp.CodeGenerator/Views/ViewModelLocator.cs b/src/OSharp.CodeGenerator/Views/ViewModelLocator.cs index 7d25650..bb2f0e6 100644 --- a/src/OSharp.CodeGenerator/Views/ViewModelLocator.cs +++ b/src/OSharp.CodeGenerator/Views/ViewModelLocator.cs @@ -8,10 +8,18 @@ // ----------------------------------------------------------------------- using System; +using System.Collections.Generic; +using System.Linq; using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.DependencyInjection; +using OSharp.CodeGeneration.Generates; +using OSharp.CodeGeneration.Services; using OSharp.CodeGeneration.Services.Entities; +using OSharp.CodeGenerator.Views.Modules; +using OSharp.CodeGenerator.Views.Projects; +using OSharp.Wpf.Stylet; namespace OSharp.CodeGenerator.Views @@ -46,5 +54,64 @@ namespace OSharp.CodeGenerator.Views public DeleteBehavior?[] DeleteBehaviors { get; } = { null, DeleteBehavior.ClientSetNull, DeleteBehavior.Restrict, DeleteBehavior.SetNull, DeleteBehavior.Cascade }; + public MetadataType[] MetadataTypes { get; } = { MetadataType.Entity, MetadataType.Module, MetadataType.Project }; + + public string[] TemplateFiles { get; } = { "内置" }; + + public string[] DataAuthFlags { get; } = { "UserFlag" }; + + public string[] Entities => GetEntities(); + + private CodeProject _project; + private string[] GetEntities() + { + ProjectViewModel project = IoC.Get().Project; + ModuleListViewModel moduleList = IoC.Get(); + List list = new List() + { + "OSharp.Core.EntityInfos.EntityInfo", + "OSharp.Core.Functions.Function", + "OSharp.Core.Systems.KeyValue" + }; + list.AddRange(new[] + { + "Identity.Entities.LoginLog", + "Identity.Entities.Organization", + "Identity.Entities.Role", + "Identity.Entities.RoleClaim", + "Identity.Entities.User", + "Identity.Entities.UserClaim", + "Identity.Entities.UserDetail", + "Identity.Entities.UserLogin", + "Identity.Entities.UserRole", + "Identity.Entities.UserToken", + "Security.Entities.EntityRole", + "Security.Entities.EntityUser", + "Security.Entities.Module", + "Security.Entities.ModuleFunction", + "Security.Entities.ModuleRole", + "Security.Entities.ModuleUser", + "Systems.Entities.AuditEntity", + "Systems.Entities.AuditOperation", + "Systems.Entities.AuditProperty" + }.Select(m => $"{project.NamespacePrefix}.{m}")); + if (moduleList != null) + { + if (_project == null) + { + IServiceProvider rootProvider = IoC.Get(); + MenuViewModel menu = rootProvider.GetRequiredService(); + rootProvider.ExecuteScopedWork(provider => + { + IDataContract contract = provider.GetRequiredService(); + _project = contract.GetCodeProject(m => m.Name == menu.Project.Name).First(); + }); + } + list.AddRange(_project.Modules.SelectMany(m => m.Entities.Select(n => $"{project.NamespacePrefix}.{m.Name}.Entities.{n.Name}")) + .OrderBy(m => m)); + } + + return list.Distinct().ToArray(); + } } } -- Gitee From e310ba8869e88cf0cfae74bf7543c27e64b3e6a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=AD=E6=98=8E=E9=94=8B?= Date: Sat, 10 Apr 2021 20:49:47 +0800 Subject: [PATCH 7/8] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E6=98=A0=E5=B0=84=E5=B8=A6=E6=9D=A5=E7=9A=84=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E4=B8=A2=E5=A4=B1=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Services/DataService.CodeEntity.cs | 4 +++ .../Services/DataService.CodeModule.cs | 4 +++ .../Services/DataService.CodeProject.cs | 5 ++- .../Services/DataService.CodeProperty.cs | 4 +++ .../Services/Entities/CodeEntity.cs | 2 +- .../Services/Entities/CodeProject.cs | 1 + .../Seeds/CodeEntitySeedDataInitializer.cs | 16 +++++----- .../Seeds/CodeModuleSeedDataInitializer.cs | 6 ++-- .../Seeds/CodePropertySeedDataInitializer.cs | 12 +++---- .../Data/AutoMapperConfiguration.cs | 24 +++++++------- .../Views/Entities/EntityListView.xaml | 7 +++-- .../Views/Entities/EntityViewModel.cs | 2 ++ .../Views/Modules/ModuleListView.xaml | 2 ++ .../Views/Modules/ModuleViewModel.cs | 9 +++--- .../Views/Projects/ProjectListViewModel.cs | 6 ++-- .../Views/Projects/ProjectViewModel.cs | 2 +- .../Views/Properties/PropertyListView.xaml | 31 ++++++++++++++++--- .../Views/Properties/PropertyViewModel.cs | 6 ++++ 18 files changed, 98 insertions(+), 45 deletions(-) diff --git a/src/OSharp.CodeGeneration/Services/DataService.CodeEntity.cs b/src/OSharp.CodeGeneration/Services/DataService.CodeEntity.cs index 9f69987..df91d99 100644 --- a/src/OSharp.CodeGeneration/Services/DataService.CodeEntity.cs +++ b/src/OSharp.CodeGeneration/Services/DataService.CodeEntity.cs @@ -63,6 +63,10 @@ namespace OSharp.CodeGeneration.Services return new OperationResult(OperationResultType.Error, $"模块“{module.Name}”中名称为“{entity.Name}”的实体信息已存在"); } + if (entity.Order == 0) + { + entity.Order = EntityRepository.Query(m => m.ModuleId == module.Id).Count() + 1; + } int count; if (entity.Id == default) { diff --git a/src/OSharp.CodeGeneration/Services/DataService.CodeModule.cs b/src/OSharp.CodeGeneration/Services/DataService.CodeModule.cs index e6c340e..2e0f34e 100644 --- a/src/OSharp.CodeGeneration/Services/DataService.CodeModule.cs +++ b/src/OSharp.CodeGeneration/Services/DataService.CodeModule.cs @@ -63,6 +63,10 @@ namespace OSharp.CodeGeneration.Services return new OperationResult(OperationResultType.Error, $"项目“{project.Name}”中名称为“{module.Name}”的模块信息已存在"); } + if (module.Order == 0) + { + module.Order = ModuleRepository.Query(m => m.ProjectId == module.ProjectId).Count() + 1; + } int count; if (module.Id == default) { diff --git a/src/OSharp.CodeGeneration/Services/DataService.CodeProject.cs b/src/OSharp.CodeGeneration/Services/DataService.CodeProject.cs index 17573ce..f7e9c89 100644 --- a/src/OSharp.CodeGeneration/Services/DataService.CodeProject.cs +++ b/src/OSharp.CodeGeneration/Services/DataService.CodeProject.cs @@ -9,6 +9,7 @@ using OSharp.Collections; using OSharp.Data; using OSharp.Extensions; using OSharp.Json; +using OSharp.Mapping; namespace OSharp.CodeGeneration.Services @@ -109,7 +110,9 @@ namespace OSharp.CodeGeneration.Services return new OperationResult(OperationResultType.Error, $"名称为“{project.Name}”的项目信息已存在"); } - int count = await ProjectRepository.UpdateAsync(project); + CodeProject existing = await ProjectRepository.GetAsync(project.Id); + existing = project.MapTo(existing); + int count = await ProjectRepository.UpdateAsync(existing); if (count > 0) { names.Add(project.Name); diff --git a/src/OSharp.CodeGeneration/Services/DataService.CodeProperty.cs b/src/OSharp.CodeGeneration/Services/DataService.CodeProperty.cs index 2ae4d58..67de755 100644 --- a/src/OSharp.CodeGeneration/Services/DataService.CodeProperty.cs +++ b/src/OSharp.CodeGeneration/Services/DataService.CodeProperty.cs @@ -63,6 +63,10 @@ namespace OSharp.CodeGeneration.Services return new OperationResult(OperationResultType.Error, $"实体“{entity.Name}”中名称为“{property.Name}”的属性信息已存在"); } + if (property.Order == 0) + { + property.Order = PropertyRepository.Query(m => m.EntityId == entity.Id).Count() + 1; + } int count; if (property.Id == default) { diff --git a/src/OSharp.CodeGeneration/Services/Entities/CodeEntity.cs b/src/OSharp.CodeGeneration/Services/Entities/CodeEntity.cs index 2b884d9..c7608d5 100644 --- a/src/OSharp.CodeGeneration/Services/Entities/CodeEntity.cs +++ b/src/OSharp.CodeGeneration/Services/Entities/CodeEntity.cs @@ -24,7 +24,7 @@ namespace OSharp.CodeGeneration.Services.Entities [Description("代码实体信息")] [TableNamePrefix("CodeGen")] [MapTo(typeof(CodeEntity))] - public class CodeEntity : EntityBase, ILockable + public class CodeEntity : EntityBase, ILockable, ICreatedTime { /// /// 获取或设置 类型名称 diff --git a/src/OSharp.CodeGeneration/Services/Entities/CodeProject.cs b/src/OSharp.CodeGeneration/Services/Entities/CodeProject.cs index e3e7773..835a036 100644 --- a/src/OSharp.CodeGeneration/Services/Entities/CodeProject.cs +++ b/src/OSharp.CodeGeneration/Services/Entities/CodeProject.cs @@ -14,6 +14,7 @@ using System.ComponentModel.DataAnnotations; using OSharp.Data; using OSharp.Entity; +using OSharp.Mapping; namespace OSharp.CodeGeneration.Services.Entities diff --git a/src/OSharp.CodeGeneration/Services/Seeds/CodeEntitySeedDataInitializer.cs b/src/OSharp.CodeGeneration/Services/Seeds/CodeEntitySeedDataInitializer.cs index fd0bdff..96a1a9b 100644 --- a/src/OSharp.CodeGeneration/Services/Seeds/CodeEntitySeedDataInitializer.cs +++ b/src/OSharp.CodeGeneration/Services/Seeds/CodeEntitySeedDataInitializer.cs @@ -40,24 +40,24 @@ namespace OSharp.CodeGeneration.Services.Seeds CodeModule module = repository.GetFirst(m => m.Name == "Identity"); List entities = new List() { - new CodeEntity(){Name = "User", Display = "用户", PrimaryKeyTypeFullName = "System.Int32", ModuleId = module.Id}, - new CodeEntity(){Name = "Role", Display = "角色", PrimaryKeyTypeFullName = "System.Int32", ModuleId = module.Id}, - new CodeEntity(){Name = "UserRole", Display = "用户角色", PrimaryKeyTypeFullName = "System.Int32", ModuleId = module.Id}, + new CodeEntity(){Name = "User", Display = "用户", Order = 1, PrimaryKeyTypeFullName = "System.Int32", ModuleId = module.Id}, + new CodeEntity(){Name = "Role", Display = "角色", Order = 2, PrimaryKeyTypeFullName = "System.Int32", ModuleId = module.Id}, + new CodeEntity(){Name = "UserRole", Display = "用户角色", Order = 3, PrimaryKeyTypeFullName = "System.Int32", ModuleId = module.Id}, }; module = repository.GetFirst(m => m.Name == "Auth"); entities.AddRange(new List() { - new CodeEntity(){Name = "Module", Display = "模块", PrimaryKeyTypeFullName = "System.Int32", ModuleId = module.Id}, - new CodeEntity(){Name = "Function", Display = "功能", PrimaryKeyTypeFullName = "System.Guid", ModuleId = module.Id}, - new CodeEntity(){Name = "EntityInfo", Display = "实体", PrimaryKeyTypeFullName = "System.Guid", ModuleId = module.Id}, + new CodeEntity(){Name = "Module", Display = "模块", Order = 1, PrimaryKeyTypeFullName = "System.Int32", ModuleId = module.Id}, + new CodeEntity(){Name = "Function", Display = "功能", Order = 2, PrimaryKeyTypeFullName = "System.Guid", ModuleId = module.Id}, + new CodeEntity(){Name = "EntityInfo", Display = "实体", Order = 3, PrimaryKeyTypeFullName = "System.Guid", ModuleId = module.Id}, }); module = repository.GetFirst(m => m.Name == "Infos"); entities.AddRange(new List() { - new CodeEntity(){Name = "Article", Display = "文章", PrimaryKeyTypeFullName = "System.Int32", ModuleId = module.Id}, - new CodeEntity(){Name = "Message", Display = "站内信", PrimaryKeyTypeFullName = "System.Guid", ModuleId = module.Id} + new CodeEntity(){Name = "Article", Display = "文章", Order = 1, PrimaryKeyTypeFullName = "System.Int32", ModuleId = module.Id}, + new CodeEntity(){Name = "Message", Display = "站内信", Order = 2, PrimaryKeyTypeFullName = "System.Guid", ModuleId = module.Id} }); return entities.ToArray(); diff --git a/src/OSharp.CodeGeneration/Services/Seeds/CodeModuleSeedDataInitializer.cs b/src/OSharp.CodeGeneration/Services/Seeds/CodeModuleSeedDataInitializer.cs index 824376d..f06c807 100644 --- a/src/OSharp.CodeGeneration/Services/Seeds/CodeModuleSeedDataInitializer.cs +++ b/src/OSharp.CodeGeneration/Services/Seeds/CodeModuleSeedDataInitializer.cs @@ -39,9 +39,9 @@ namespace OSharp.CodeGeneration.Services.Seeds CodeProject project = repository.GetFirst(m => m.Name == "示例项目"); return new[] { - new CodeModule(){Name = "Identity", Display = "身份认证", ProjectId = project.Id}, - new CodeModule(){Name = "Auth", Display = "权限授权", ProjectId = project.Id}, - new CodeModule(){Name = "Infos", Display = "信息", ProjectId = project.Id}, + new CodeModule(){Name = "Identity", Display = "身份认证", Order = 1, ProjectId = project.Id}, + new CodeModule(){Name = "Auth", Display = "权限授权", Order = 2, ProjectId = project.Id}, + new CodeModule(){Name = "Infos", Display = "信息", Order = 3, ProjectId = project.Id}, }; } diff --git a/src/OSharp.CodeGeneration/Services/Seeds/CodePropertySeedDataInitializer.cs b/src/OSharp.CodeGeneration/Services/Seeds/CodePropertySeedDataInitializer.cs index 70b9531..f4ef90f 100644 --- a/src/OSharp.CodeGeneration/Services/Seeds/CodePropertySeedDataInitializer.cs +++ b/src/OSharp.CodeGeneration/Services/Seeds/CodePropertySeedDataInitializer.cs @@ -39,12 +39,12 @@ namespace OSharp.CodeGeneration.Services.Seeds CodeEntity entity = repository.GetFirst(m => m.Name == "User"); List properties = new List() { - new CodeProperty(){Name = "UserName", Display = "用户名", TypeName = "System.String", IsRequired = true, MaxLength = 200, EntityId = entity.Id}, - new CodeProperty(){Name = "NickName", Display = "用户昵称", TypeName = "System.String", IsRequired = true, MaxLength = 200, EntityId = entity.Id}, - new CodeProperty(){Name = "Email", Display = "邮箱", TypeName = "System.String", MaxLength = 200, EntityId = entity.Id}, - new CodeProperty(){Name = "EmailConfirmed", Display = "邮箱确认", TypeName = "System.Boolean", EntityId = entity.Id}, - new CodeProperty(){Name = "PhoneNumber", Display = "手机号", TypeName = "System.String", MaxLength = 50, EntityId = entity.Id}, - new CodeProperty(){Name = "PhoneNumberConfirmed", Display = "手机号确认", TypeName = "System.Boolean", EntityId = entity.Id}, + new CodeProperty(){Name = "UserName", Display = "用户名", TypeName = "System.String", Order = 1, IsRequired = true, MaxLength = 200, EntityId = entity.Id}, + new CodeProperty(){Name = "NickName", Display = "用户昵称", TypeName = "System.String", Order = 2, IsRequired = true, MaxLength = 200, EntityId = entity.Id}, + new CodeProperty(){Name = "Email", Display = "邮箱", TypeName = "System.String", Order = 3, MaxLength = 200, EntityId = entity.Id}, + new CodeProperty(){Name = "EmailConfirmed", Display = "邮箱确认", TypeName = "System.Boolean", Order = 4, EntityId = entity.Id}, + new CodeProperty(){Name = "PhoneNumber", Display = "手机号", TypeName = "System.String", Order = 5, MaxLength = 50, EntityId = entity.Id}, + new CodeProperty(){Name = "PhoneNumberConfirmed", Display = "手机号确认", TypeName = "System.Boolean", Order = 6, EntityId = entity.Id}, }; return properties.ToArray(); diff --git a/src/OSharp.CodeGenerator/Data/AutoMapperConfiguration.cs b/src/OSharp.CodeGenerator/Data/AutoMapperConfiguration.cs index 42f8084..bd9d7bb 100644 --- a/src/OSharp.CodeGenerator/Data/AutoMapperConfiguration.cs +++ b/src/OSharp.CodeGenerator/Data/AutoMapperConfiguration.cs @@ -7,14 +7,8 @@ // 2021-04-06 13:13 // ----------------------------------------------------------------------- -using System; -using System.Runtime.Serialization; - -using AutoMapper.Configuration; - using OSharp.AutoMapper; using OSharp.CodeGeneration.Services.Entities; -using OSharp.CodeGenerator.Views; using OSharp.CodeGenerator.Views.Entities; using OSharp.CodeGenerator.Views.Modules; using OSharp.CodeGenerator.Views.Properties; @@ -27,22 +21,30 @@ namespace OSharp.CodeGenerator.Data /// 创建对象映射 public override void CreateMap() { + CreateMap().ForMember(e => e.Modules, opt => opt.Ignore()) + .ForMember(e => e.ProjectTemplates, opt => opt.Ignore()); + CreateMap().ForMember(e => e.ProjectId, opt => opt.MapFrom(vm => vm.Project.Id)) .ForMember(e => e.Project, opt => opt.Ignore()); CreateMap().ForMember(vm => vm.Namespace, opt => opt.Ignore()) .ForMember(vm => vm.Project, opt => opt.Ignore()); - CreateMap().ForMember(vm => vm.Namespace, opt => opt.Ignore()) - .ForMember(vm => vm.Project, opt => opt.Ignore()); + CreateMap().ForMember(e => e.Namespace, opt => opt.Ignore()) + .ForMember(e => e.Project, opt => opt.Ignore()) + .ForMember(e => e.Entities, opt => opt.Ignore()); CreateMap().ForMember(e => e.ModuleId, opt => opt.MapFrom(vm => vm.Module.Id)) .ForMember(e => e.Module, opt => opt.Ignore()); CreateMap().ForMember(vm => vm.Module, opt => opt.Ignore()); - CreateMap().ForMember(vm => vm.Module, opt => opt.Ignore()); + CreateMap().ForMember(e => e.Module, opt => opt.Ignore()) + .ForMember(e => e.Properties, opt => opt.Ignore()) + .ForMember(e => e.Foreigns, opt => opt.Ignore()); CreateMap().ForMember(e => e.EntityId, opt => opt.MapFrom(vm => vm.Entity.Id)) - .ForMember(e=>e.Entity, opt=>opt.Ignore()); + .ForMember(e => e.Entity, opt => opt.Ignore()); CreateMap().ForMember(vm => vm.Entity, opt => opt.Ignore()); - CreateMap().ForMember(vm => vm.Entity, opt => opt.Ignore()); + CreateMap().ForMember(e => e.Entity, opt => opt.Ignore()); + + CreateMap().ForMember(e => e.Entity, opt => opt.Ignore()); } } } diff --git a/src/OSharp.CodeGenerator/Views/Entities/EntityListView.xaml b/src/OSharp.CodeGenerator/Views/Entities/EntityListView.xaml index bfcbef9..0269cc5 100644 --- a/src/OSharp.CodeGenerator/Views/Entities/EntityListView.xaml +++ b/src/OSharp.CodeGenerator/Views/Entities/EntityListView.xaml @@ -40,9 +40,9 @@ - - - + + + @@ -64,6 +64,7 @@ + diff --git a/src/OSharp.CodeGenerator/Views/Entities/EntityViewModel.cs b/src/OSharp.CodeGenerator/Views/Entities/EntityViewModel.cs index 618bd19..86ddbc6 100644 --- a/src/OSharp.CodeGenerator/Views/Entities/EntityViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Entities/EntityViewModel.cs @@ -74,6 +74,8 @@ namespace OSharp.CodeGenerator.Views.Entities public int Order { get; set; } + public DateTime CreatedTime { get; set; } + public CodeEntity ToEntity() { CodeEntity entity = this.MapTo(); diff --git a/src/OSharp.CodeGenerator/Views/Modules/ModuleListView.xaml b/src/OSharp.CodeGenerator/Views/Modules/ModuleListView.xaml index cc681a1..8dfff9f 100644 --- a/src/OSharp.CodeGenerator/Views/Modules/ModuleListView.xaml +++ b/src/OSharp.CodeGenerator/Views/Modules/ModuleListView.xaml @@ -42,7 +42,9 @@ + + diff --git a/src/OSharp.CodeGenerator/Views/Modules/ModuleViewModel.cs b/src/OSharp.CodeGenerator/Views/Modules/ModuleViewModel.cs index df19c7a..ca67389 100644 --- a/src/OSharp.CodeGenerator/Views/Modules/ModuleViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Modules/ModuleViewModel.cs @@ -8,17 +8,12 @@ // ----------------------------------------------------------------------- using System; -using System.Collections.Generic; using System.Windows; -using AutoMapper; - using FluentValidation; using Microsoft.Extensions.DependencyInjection; -using Notifications.Wpf.Core; - using OSharp.CodeGeneration.Services; using OSharp.CodeGeneration.Services.Entities; using OSharp.CodeGenerator.Data; @@ -55,6 +50,10 @@ namespace OSharp.CodeGenerator.Views.Modules public int Order { get; set; } + public bool IsLocked { get; set; } + + public DateTime CreatedTime { get; set; } + public string Namespace => $"{(Project == null ? "" : Project.NamespacePrefix + ".")}{Name}"; public ProjectViewModel Project { get; set; } diff --git a/src/OSharp.CodeGenerator/Views/Projects/ProjectListViewModel.cs b/src/OSharp.CodeGenerator/Views/Projects/ProjectListViewModel.cs index fd6fcb2..e56c1b1 100644 --- a/src/OSharp.CodeGenerator/Views/Projects/ProjectListViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Projects/ProjectListViewModel.cs @@ -10,6 +10,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; @@ -49,14 +50,15 @@ namespace OSharp.CodeGenerator.Views.Projects IsShow = true; } - public void Init() + public async void Init() { List projects = new List(); - _provider.ExecuteScopedWork(provider => + await _provider.ExecuteScopedWork(provider => { Projects.Clear(); IDataContract contract = provider.GetRequiredService(); projects = contract.CodeProjects.ToList(); + return Task.CompletedTask; }); foreach (CodeProject project in projects) { diff --git a/src/OSharp.CodeGenerator/Views/Projects/ProjectViewModel.cs b/src/OSharp.CodeGenerator/Views/Projects/ProjectViewModel.cs index b45552c..468ab5c 100644 --- a/src/OSharp.CodeGenerator/Views/Projects/ProjectViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Projects/ProjectViewModel.cs @@ -34,8 +34,8 @@ using Stylet; namespace OSharp.CodeGenerator.Views.Projects { - [MapTo(typeof(CodeProject))] [MapFrom(typeof(CodeProject))] + [MapTo(typeof(CodeProject))] public class ProjectViewModel : Screen { private readonly IServiceProvider _serviceProvider; diff --git a/src/OSharp.CodeGenerator/Views/Properties/PropertyListView.xaml b/src/OSharp.CodeGenerator/Views/Properties/PropertyListView.xaml index 26cd5d4..a9feddb 100644 --- a/src/OSharp.CodeGenerator/Views/Properties/PropertyListView.xaml +++ b/src/OSharp.CodeGenerator/Views/Properties/PropertyListView.xaml @@ -59,8 +59,30 @@ - - + + + + + + + + + + + + + + + + + + + + + + + + @@ -88,9 +110,10 @@ - - + + + diff --git a/src/OSharp.CodeGenerator/Views/Properties/PropertyViewModel.cs b/src/OSharp.CodeGenerator/Views/Properties/PropertyViewModel.cs index fd1baf8..fe5e6cb 100644 --- a/src/OSharp.CodeGenerator/Views/Properties/PropertyViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Properties/PropertyViewModel.cs @@ -7,6 +7,8 @@ // 2020-05-07 1:27 // ----------------------------------------------------------------------- +using System; + using FluentValidation; using OSharp.CodeGeneration.Services.Entities; @@ -33,6 +35,8 @@ namespace OSharp.CodeGenerator.Views.Properties public EntityViewModel Entity { get; set; } + public Guid Id { get; set; } + public string Name { get; set; } public string Display { get; set; } @@ -75,6 +79,8 @@ namespace OSharp.CodeGenerator.Views.Properties public int Order { get; set; } + public DateTime CreatedTime { get; set; } + public CodeProperty ToProperty() { CodeProperty property = this.MapTo(); -- Gitee From e531398879b509a929fcc1bdcc244735d3e849e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=AD=E6=98=8E=E9=94=8B?= Date: Sat, 10 Apr 2021 22:29:54 +0800 Subject: [PATCH 8/8] =?UTF-8?q?=E5=B0=86=E6=95=B0=E6=8D=AE=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E5=B1=82=E6=94=B9=E6=88=90=E8=BE=93=E5=85=A5DTO?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Services/DataService.CodeEntity.cs | 34 +++-- .../Services/DataService.CodeForeign.cs | 30 ++-- .../Services/DataService.CodeModule.cs | 33 +++-- .../Services/DataService.CodeProject.cs | 36 +++-- .../Services/DataService.CodeProperty.cs | 34 +++-- .../Services/DataService.CodeTemplate.cs | 26 ++-- .../Services/Dtos/CodeEntityInputDto.cs | 109 ++++++++++++++ .../Services/Dtos/CodeForeignInputDto.cs | 68 +++++++++ .../Services/Dtos/CodeModuleInputDto.cs | 51 +++++++ .../Services/Dtos/CodeProjectInputDto.cs | 62 ++++++++ .../Services/Dtos/CodePropertyInputDto.cs | 137 ++++++++++++++++++ .../Services/Dtos/CodeTemplateInputDto.cs | 69 +++++++++ .../Services/Entities/CodeTemplate.cs | 8 +- .../Services/IDataContract.cs | 45 +++--- .../Views/Entities/EntityListViewModel.cs | 5 +- .../Views/Entities/EntityViewModel.cs | 9 +- .../Views/Modules/ModuleListViewModel.cs | 5 +- .../Views/Modules/ModuleViewModel.cs | 9 +- .../Views/Projects/ProjectViewModel.cs | 16 +- .../Views/Properties/PropertyListViewModel.cs | 5 +- .../Views/Properties/PropertyViewModel.cs | 11 +- 21 files changed, 651 insertions(+), 151 deletions(-) create mode 100644 src/OSharp.CodeGeneration/Services/Dtos/CodeEntityInputDto.cs create mode 100644 src/OSharp.CodeGeneration/Services/Dtos/CodeForeignInputDto.cs create mode 100644 src/OSharp.CodeGeneration/Services/Dtos/CodeModuleInputDto.cs create mode 100644 src/OSharp.CodeGeneration/Services/Dtos/CodeProjectInputDto.cs create mode 100644 src/OSharp.CodeGeneration/Services/Dtos/CodePropertyInputDto.cs create mode 100644 src/OSharp.CodeGeneration/Services/Dtos/CodeTemplateInputDto.cs diff --git a/src/OSharp.CodeGeneration/Services/DataService.CodeEntity.cs b/src/OSharp.CodeGeneration/Services/DataService.CodeEntity.cs index df91d99..f003ba5 100644 --- a/src/OSharp.CodeGeneration/Services/DataService.CodeEntity.cs +++ b/src/OSharp.CodeGeneration/Services/DataService.CodeEntity.cs @@ -13,6 +13,7 @@ using System.Linq; using System.Linq.Expressions; using System.Threading.Tasks; +using OSharp.CodeGeneration.Services.Dtos; using OSharp.CodeGeneration.Services.Entities; using OSharp.Collections; using OSharp.Data; @@ -43,45 +44,46 @@ namespace OSharp.CodeGeneration.Services /// /// 更新代码实体信息信息 /// - /// 包含更新信息的代码实体信息DTO信息 + /// 包含更新信息的代码实体信息DTO信息 /// 业务操作结果 - public async Task UpdateCodeEntities(params CodeEntity[] entities) + public async Task UpdateCodeEntities(params CodeEntityInputDto[] dtos) { List names = new List(); UnitOfWork.EnableTransaction(); - foreach (var entity in entities) + foreach (var dto in dtos) { - entity.Validate(); - CodeModule module = await ModuleRepository.GetAsync(entity.ModuleId); + dto.Validate(); + CodeModule module = await ModuleRepository.GetAsync(dto.ModuleId); if (module == null) { - return new OperationResult(OperationResultType.Error, $"编号为“{entity.ModuleId}”的模块信息不存在"); + return new OperationResult(OperationResultType.Error, $"编号为“{dto.ModuleId}”的模块信息不存在"); } - if (await CheckCodeEntityExists(m => m.Name == entity.Name && m.ModuleId == entity.ModuleId, entity.Id)) + if (await CheckCodeEntityExists(m => m.Name == dto.Name && m.ModuleId == dto.ModuleId, dto.Id)) { - return new OperationResult(OperationResultType.Error, $"模块“{module.Name}”中名称为“{entity.Name}”的实体信息已存在"); + return new OperationResult(OperationResultType.Error, $"模块“{module.Name}”中名称为“{dto.Name}”的实体信息已存在"); } - if (entity.Order == 0) + if (dto.Order == 0) { - entity.Order = EntityRepository.Query(m => m.ModuleId == module.Id).Count() + 1; + dto.Order = EntityRepository.Query(m => m.ModuleId == module.Id).Count() + 1; } int count; - if (entity.Id == default) + if (dto.Id == default) { + CodeEntity entity = dto.MapTo(); count = await EntityRepository.InsertAsync(entity); } else { - CodeEntity existing = await EntityRepository.GetAsync(entity.Id); - existing = entity.MapTo(existing); - count = await EntityRepository.UpdateAsync(existing); + CodeEntity entity = await EntityRepository.GetAsync(dto.Id); + entity = dto.MapTo(entity); + count = await EntityRepository.UpdateAsync(entity); } if (count > 0) { - names.Add(entity.Name); + names.Add(dto.Name); } } @@ -90,7 +92,7 @@ namespace OSharp.CodeGeneration.Services ? new OperationResult(OperationResultType.Success, $"实体“{names.ExpandAndToString()}”保存成功") : OperationResult.NoChanged; } - + /// /// 删除代码实体信息信息 /// diff --git a/src/OSharp.CodeGeneration/Services/DataService.CodeForeign.cs b/src/OSharp.CodeGeneration/Services/DataService.CodeForeign.cs index 3ea4f90..527b09b 100644 --- a/src/OSharp.CodeGeneration/Services/DataService.CodeForeign.cs +++ b/src/OSharp.CodeGeneration/Services/DataService.CodeForeign.cs @@ -13,6 +13,7 @@ using System.Linq; using System.Linq.Expressions; using System.Threading.Tasks; +using OSharp.CodeGeneration.Services.Dtos; using OSharp.CodeGeneration.Services.Entities; using OSharp.Collections; using OSharp.Data; @@ -39,44 +40,45 @@ namespace OSharp.CodeGeneration.Services { return ForeignRepository.CheckExistsAsync(predicate, id); } - + /// /// 更新实体外键信息信息 /// - /// 包含更新信息的实体外键信息 + /// 包含更新信息的实体外键信息 /// 业务操作结果 - public async Task UpdateCodeForeigns(params CodeForeign[] foreigns) + public async Task UpdateCodeForeigns(params CodeForeignInputDto[] dtos) { List names = new List(); UnitOfWork.EnableTransaction(); - foreach (var foreign in foreigns) + foreach (var dto in dtos) { - foreign.Validate(); - CodeEntity entity = await EntityRepository.GetAsync(foreign.EntityId); + dto.Validate(); + CodeEntity entity = await EntityRepository.GetAsync(dto.EntityId); if (entity == null) { - return new OperationResult(OperationResultType.Error, $"编号为“{foreign.EntityId}”的实体信息不存在"); + return new OperationResult(OperationResultType.Error, $"编号为“{dto.EntityId}”的实体信息不存在"); } - if (await CheckCodeForeignExists(m => m.SelfNavigation == foreign.SelfNavigation && m.EntityId == foreign.EntityId, entity.Id)) + if (await CheckCodeForeignExists(m => m.SelfNavigation == dto.SelfNavigation && m.EntityId == dto.EntityId, entity.Id)) { - return new OperationResult(OperationResultType.Error, $"实体“{entity.Name}”中名称为“{foreign.SelfNavigation}”的外键信息已存在"); + return new OperationResult(OperationResultType.Error, $"实体“{entity.Name}”中名称为“{dto.SelfNavigation}”的外键信息已存在"); } int count; - if (foreign.Id == default) + if (dto.Id == default) { + CodeForeign foreign = dto.MapTo(); count = await ForeignRepository.InsertAsync(foreign); } else { - CodeForeign existing = await ForeignRepository.GetAsync(foreign.Id); - existing = foreign.MapTo(existing); - count = await ForeignRepository.UpdateAsync(existing); + CodeForeign foreign = await ForeignRepository.GetAsync(dto.Id); + foreign = dto.MapTo(foreign); + count = await ForeignRepository.UpdateAsync(foreign); } if (count > 0) { - names.Add($"{entity.Name}-{foreign.SelfNavigation}"); + names.Add($"{entity.Name}-{dto.SelfNavigation}"); } } diff --git a/src/OSharp.CodeGeneration/Services/DataService.CodeModule.cs b/src/OSharp.CodeGeneration/Services/DataService.CodeModule.cs index 2e0f34e..dc7f917 100644 --- a/src/OSharp.CodeGeneration/Services/DataService.CodeModule.cs +++ b/src/OSharp.CodeGeneration/Services/DataService.CodeModule.cs @@ -13,6 +13,7 @@ using System.Linq; using System.Linq.Expressions; using System.Threading.Tasks; +using OSharp.CodeGeneration.Services.Dtos; using OSharp.CodeGeneration.Services.Entities; using OSharp.Collections; using OSharp.Data; @@ -43,44 +44,45 @@ namespace OSharp.CodeGeneration.Services /// /// 更新代码模块信息信息 /// - /// 包含更新信息的代码模块信息 + /// 包含更新信息的代码模块信息DTO信息 /// 业务操作结果 - public async Task UpdateCodeModules(params CodeModule[] modules) + public async Task UpdateCodeModules(params CodeModuleInputDto[] dtos) { List names = new List(); UnitOfWork.EnableTransaction(); - foreach (CodeModule module in modules) + foreach (var dto in dtos) { - module.Validate(); - CodeProject project = await ProjectRepository.GetAsync(module.ProjectId); + dto.Validate(); + CodeProject project = await ProjectRepository.GetAsync(dto.ProjectId); if (project == null) { - return new OperationResult(OperationResultType.Error, $"编号为“{module.ProjectId}”的项目信息不存在"); + return new OperationResult(OperationResultType.Error, $"编号为“{dto.ProjectId}”的项目信息不存在"); } - if (await CheckCodeModuleExists(m => m.Name == module.Name && m.ProjectId == module.ProjectId, module.Id)) + if (await CheckCodeModuleExists(m => m.Name == dto.Name && m.ProjectId == dto.ProjectId, dto.Id)) { - return new OperationResult(OperationResultType.Error, $"项目“{project.Name}”中名称为“{module.Name}”的模块信息已存在"); + return new OperationResult(OperationResultType.Error, $"项目“{project.Name}”中名称为“{dto.Name}”的模块信息已存在"); } - if (module.Order == 0) + if (dto.Order == 0) { - module.Order = ModuleRepository.Query(m => m.ProjectId == module.ProjectId).Count() + 1; + dto.Order = ModuleRepository.Query(m => m.ProjectId == dto.ProjectId).Count() + 1; } int count; - if (module.Id == default) + if (dto.Id == default) { + CodeModule module = dto.MapTo(); count = await ModuleRepository.InsertAsync(module); } else { - CodeModule existing = await ModuleRepository.GetAsync(module.Id); - existing = module.MapTo(existing); - count = await ModuleRepository.UpdateAsync(existing); + CodeModule module = await ModuleRepository.GetAsync(dto.Id); + module = dto.MapTo(module); + count = await ModuleRepository.UpdateAsync(module); } if (count > 0) { - names.Add(module.Name); + names.Add(dto.Name); } } @@ -125,5 +127,6 @@ namespace OSharp.CodeGeneration.Services ? new OperationResult(OperationResultType.Success, $"模块“{names.ExpandAndToString()}”删除成功") : OperationResult.NoChanged; } + } } diff --git a/src/OSharp.CodeGeneration/Services/DataService.CodeProject.cs b/src/OSharp.CodeGeneration/Services/DataService.CodeProject.cs index f7e9c89..b28ae47 100644 --- a/src/OSharp.CodeGeneration/Services/DataService.CodeProject.cs +++ b/src/OSharp.CodeGeneration/Services/DataService.CodeProject.cs @@ -4,6 +4,7 @@ using System.Linq; using System.Linq.Expressions; using System.Threading.Tasks; +using OSharp.CodeGeneration.Services.Dtos; using OSharp.CodeGeneration.Services.Entities; using OSharp.Collections; using OSharp.Data; @@ -62,24 +63,25 @@ namespace OSharp.CodeGeneration.Services return projects; } - + /// /// 添加项目信息信息 /// - /// 要添加的项目信息 + /// 要添加的项目信息DTO信息 /// 业务操作结果 - public async Task CreateCodeProjects(params CodeProject[] projects) + public async Task CreateCodeProjects(params CodeProjectInputDto[] dtos) { List names = new List(); UnitOfWork.EnableTransaction(); - foreach (CodeProject project in projects) + foreach (var dto in dtos) { - project.Validate(); - if (await CheckCodeProjectExists(m => m.Name == project.Name)) + dto.Validate(); + if (await CheckCodeProjectExists(m => m.Name == dto.Name)) { - return new OperationResult(OperationResultType.Error, $"名称为“{project.Name}”的项目信息已存在"); + return new OperationResult(OperationResultType.Error, $"名称为“{dto.Name}”的项目信息已存在"); } + CodeProject project = dto.MapTo(); int count = await ProjectRepository.InsertAsync(project); if (count > 0) { @@ -96,26 +98,27 @@ namespace OSharp.CodeGeneration.Services /// /// 更新项目信息信息 /// - /// 包含更新信息的项目信息 + /// 包含更新信息的项目信息DTO信息 /// 业务操作结果 - public async Task UpdateCodeProjects(params CodeProject[] projects) + public async Task UpdateCodeProjects(params CodeProjectInputDto[] dtos) { + List names = new List(); UnitOfWork.EnableTransaction(); - foreach (CodeProject project in projects) + foreach (var dto in dtos) { - project.Validate(); - if (await CheckCodeProjectExists(m => m.Name == project.Name, project.Id)) + dto.Validate(); + if (await CheckCodeProjectExists(m => m.Name == dto.Name, dto.Id)) { - return new OperationResult(OperationResultType.Error, $"名称为“{project.Name}”的项目信息已存在"); + return new OperationResult(OperationResultType.Error, $"名称为“{dto.Name}”的项目信息已存在"); } - CodeProject existing = await ProjectRepository.GetAsync(project.Id); - existing = project.MapTo(existing); + CodeProject existing = await ProjectRepository.GetAsync(dto.Id); + existing = dto.MapTo(existing); int count = await ProjectRepository.UpdateAsync(existing); if (count > 0) { - names.Add(project.Name); + names.Add(dto.Name); } } @@ -160,5 +163,6 @@ namespace OSharp.CodeGeneration.Services ? new OperationResult(OperationResultType.Success, $"项目“{names.ExpandAndToString()}”删除成功") : OperationResult.NoChanged; } + } } diff --git a/src/OSharp.CodeGeneration/Services/DataService.CodeProperty.cs b/src/OSharp.CodeGeneration/Services/DataService.CodeProperty.cs index 67de755..2643f53 100644 --- a/src/OSharp.CodeGeneration/Services/DataService.CodeProperty.cs +++ b/src/OSharp.CodeGeneration/Services/DataService.CodeProperty.cs @@ -13,6 +13,7 @@ using System.Linq; using System.Linq.Expressions; using System.Threading.Tasks; +using OSharp.CodeGeneration.Services.Dtos; using OSharp.CodeGeneration.Services.Entities; using OSharp.Collections; using OSharp.Data; @@ -39,49 +40,50 @@ namespace OSharp.CodeGeneration.Services { return PropertyRepository.CheckExistsAsync(predicate, id); } - + /// /// 更新实体属性信息信息 /// - /// 包含更新信息的实体属性信息 + /// 包含更新信息的实体属性信息输入DTO /// 业务操作结果 - public async Task UpdateCodeProperties(params CodeProperty[] properties) + public async Task UpdateCodeProperties(params CodePropertyInputDto[] dtos) { List names = new List(); UnitOfWork.EnableTransaction(); - foreach (var property in properties) + foreach (var dto in dtos) { - property.Validate(); - CodeEntity entity = await EntityRepository.GetAsync(property.EntityId); + dto.Validate(); + CodeEntity entity = await EntityRepository.GetAsync(dto.EntityId); if (entity == null) { - return new OperationResult(OperationResultType.Error, $"编号为“{property.EntityId}”的实体信息不存在"); + return new OperationResult(OperationResultType.Error, $"编号为“{dto.EntityId}”的实体信息不存在"); } - if (await CheckCodePropertyExists(m => m.Name == property.Name && m.EntityId == property.EntityId, property.Id)) + if (await CheckCodePropertyExists(m => m.Name == dto.Name && m.EntityId == dto.EntityId, dto.Id)) { - return new OperationResult(OperationResultType.Error, $"实体“{entity.Name}”中名称为“{property.Name}”的属性信息已存在"); + return new OperationResult(OperationResultType.Error, $"实体“{entity.Name}”中名称为“{dto.Name}”的属性信息已存在"); } - if (property.Order == 0) + if (dto.Order == 0) { - property.Order = PropertyRepository.Query(m => m.EntityId == entity.Id).Count() + 1; + dto.Order = PropertyRepository.Query(m => m.EntityId == entity.Id).Count() + 1; } int count; - if (property.Id == default) + if (dto.Id == default) { + CodeProperty property = dto.MapTo(); count = await PropertyRepository.InsertAsync(property); } else { - CodeProperty existing = await PropertyRepository.GetAsync(property.Id); - existing = property.MapTo(existing); - count = await PropertyRepository.UpdateAsync(existing); + CodeProperty property = await PropertyRepository.GetAsync(dto.Id); + property = dto.MapTo(property); + count = await PropertyRepository.UpdateAsync(property); } if (count > 0) { - names.Add(property.Name); + names.Add(dto.Name); } } diff --git a/src/OSharp.CodeGeneration/Services/DataService.CodeTemplate.cs b/src/OSharp.CodeGeneration/Services/DataService.CodeTemplate.cs index e153b0b..806dde7 100644 --- a/src/OSharp.CodeGeneration/Services/DataService.CodeTemplate.cs +++ b/src/OSharp.CodeGeneration/Services/DataService.CodeTemplate.cs @@ -13,6 +13,7 @@ using System.Linq; using System.Linq.Expressions; using System.Threading.Tasks; +using OSharp.CodeGeneration.Services.Dtos; using OSharp.CodeGeneration.Services.Entities; using OSharp.Collections; using OSharp.Data; @@ -44,35 +45,36 @@ namespace OSharp.CodeGeneration.Services /// /// 更新代码设置信息信息 /// - /// 包含更新信息的代码设置信息 + /// 包含更新信息的代码设置信息 /// 业务操作结果 - public async Task UpdateCodeTemplates(params CodeTemplate[] entities) + public async Task UpdateCodeTemplates(params CodeTemplateInputDto[] dtos) { List names = new List(); UnitOfWork.EnableTransaction(); - foreach (var entity in entities) + foreach (var dto in dtos) { - entity.Validate(); - if (await CheckCodeTemplateExists(m=>m.Name == entity.Name, entity.Id)) + dto.Validate(); + if (await CheckCodeTemplateExists(m=>m.Name == dto.Name, dto.Id)) { - return new OperationResult(OperationResultType.Error, $"名称为“{entity.Name}”的代码设置已存在"); + return new OperationResult(OperationResultType.Error, $"名称为“{dto.Name}”的代码设置已存在"); } int count; - if (entity.Id == default) + if (dto.Id == default) { - count = await TemplateRepository.InsertAsync(entity); + CodeTemplate template = dto.MapTo(); + count = await TemplateRepository.InsertAsync(template); } else { - CodeTemplate entity1 = await TemplateRepository.GetAsync(entity.Id); - entity1 = entity.MapTo(entity1); - count = await TemplateRepository.UpdateAsync(entity1); + CodeTemplate template = await TemplateRepository.GetAsync(dto.Id); + template = dto.MapTo(template); + count = await TemplateRepository.UpdateAsync(template); } if (count > 0) { - names.Add(entity.Name); + names.Add(dto.Name); } } diff --git a/src/OSharp.CodeGeneration/Services/Dtos/CodeEntityInputDto.cs b/src/OSharp.CodeGeneration/Services/Dtos/CodeEntityInputDto.cs new file mode 100644 index 0000000..1e5d2a2 --- /dev/null +++ b/src/OSharp.CodeGeneration/Services/Dtos/CodeEntityInputDto.cs @@ -0,0 +1,109 @@ +// ----------------------------------------------------------------------- +// +// Copyright (c) 2014-2021 OSharp. All rights reserved. +// +// http://www.osharp.org +// 郭明锋 +// 2021-04-10 21:54 +// ----------------------------------------------------------------------- + +using System; +using System.ComponentModel.DataAnnotations; + +using OSharp.CodeGeneration.Services.Entities; +using OSharp.Entity; +using OSharp.Mapping; + + +namespace OSharp.CodeGeneration.Services.Dtos +{ + [MapTo(typeof(CodeEntity))] + public class CodeEntityInputDto : IInputDto + { + /// + /// 获取或设置 编号 + /// + public Guid Id { get; set; } + + /// + /// 获取或设置 类型名称 + /// + [Required(), StringLength(200)] + public string Name { get; set; } + + /// + /// 获取或设置 类型显示名称 + /// + [Required(), StringLength(200)] + public string Display { get; set; } + + /// + /// 获取或设置 主键类型全名 + /// + [Required(), StringLength(500)] + public string PrimaryKeyTypeFullName { get; set; } + + /// + /// 获取或设置 是否可列表 + /// + public bool Listable { get; set; } + + /// + /// 获取或设置 是否可添加 + /// + public bool Addable { get; set; } + + /// + /// 获取或设置 是否可更新 + /// + public bool Updatable { get; set; } + + /// + /// 获取或设置 是否可删除 + /// + public bool Deletable { get; set; } + + /// + /// 获取或设置 是否数据权限控制 + /// + public bool IsDataAuth { get; set; } + + /// + /// 获取或设置 是否有创建时间 + /// + public bool HasCreatedTime { get; set; } + + /// + /// 获取或设置 是否有锁定 + /// + public bool HasLocked { get; set; } + + /// + /// 获取或设置 是否有软删除 + /// + public bool HasSoftDeleted { get; set; } + + /// + /// 获取或设置 是否有创建审计 + /// + public bool HasCreationAudited { get; set; } + + /// + /// 获取或设置 是否有更新审计 + /// + public bool HasUpdateAudited { get; set; } + + /// + /// 获取或设置 排序号 + /// + public int Order { get; set; } + + /// 获取或设置 是否锁定当前信息 + public bool IsLocked { get; set; } + + /// + /// 获取或设置 所属模块编号 + /// + public Guid ModuleId { get; set; } + } +} diff --git a/src/OSharp.CodeGeneration/Services/Dtos/CodeForeignInputDto.cs b/src/OSharp.CodeGeneration/Services/Dtos/CodeForeignInputDto.cs new file mode 100644 index 0000000..7e1c536 --- /dev/null +++ b/src/OSharp.CodeGeneration/Services/Dtos/CodeForeignInputDto.cs @@ -0,0 +1,68 @@ +// ----------------------------------------------------------------------- +// +// Copyright (c) 2014-2021 OSharp. All rights reserved. +// +// http://www.osharp.org +// 郭明锋 +// 2021-04-10 22:03 +// ----------------------------------------------------------------------- + +using System; + +using Microsoft.EntityFrameworkCore; + +using OSharp.CodeGeneration.Services.Entities; +using OSharp.Entity; +using OSharp.Mapping; + + +namespace OSharp.CodeGeneration.Services.Dtos +{ + [MapTo(typeof(CodeForeign))] + public class CodeForeignInputDto : IInputDto + { + /// 获取或设置 主键,唯一标识 + public Guid Id { get; set; } + + /// + /// 获取或设置 己方导航属性 + /// + public string SelfNavigation { get; set; } + + /// + /// 获取或设置 己方外键属性 + /// + public string SelfForeignKey { get; set; } + + /// + /// 获取或设置 对方实体 + /// + public string OtherEntity { get; set; } + + /// + /// 获取或设置 对方导航属性 + /// + public string OtherNavigation { get; set; } + + /// + /// 获取或设置 是否必须 + /// + public bool IsRequired { get; set; } + + /// + /// 获取或设置 关系数据删除行为 + /// + public DeleteBehavior? DeleteBehavior { get; set; } + + /// + /// 获取或设置 外键关系 + /// + public ForeignRelation ForeignRelation { get; set; } + + /// + /// 获取或设置 实体编号 + /// + public Guid EntityId { get; set; } + + } +} diff --git a/src/OSharp.CodeGeneration/Services/Dtos/CodeModuleInputDto.cs b/src/OSharp.CodeGeneration/Services/Dtos/CodeModuleInputDto.cs new file mode 100644 index 0000000..8094d62 --- /dev/null +++ b/src/OSharp.CodeGeneration/Services/Dtos/CodeModuleInputDto.cs @@ -0,0 +1,51 @@ +// ----------------------------------------------------------------------- +// +// Copyright (c) 2014-2021 OSharp. All rights reserved. +// +// http://www.osharp.org +// 郭明锋 +// 2021-04-10 21:47 +// ----------------------------------------------------------------------- + +using System; +using System.ComponentModel.DataAnnotations; + +using OSharp.CodeGeneration.Services.Entities; +using OSharp.Entity; +using OSharp.Mapping; + + +namespace OSharp.CodeGeneration.Services.Dtos +{ + [MapTo(typeof(CodeModule))] + public class CodeModuleInputDto : IInputDto + { + /// 获取或设置 主键,唯一标识 + public Guid Id { get; set; } + + /// + /// 获取或设置 模块名称 + /// + [Required(), StringLength(200)] + public string Name { get; set; } + + /// + /// 获取或设置 模块显示名称 + /// + [Required(), StringLength(200)] + public string Display { get; set; } + + /// + /// 获取或设置 排序号 + /// + public int Order { get; set; } + + /// 获取或设置 是否锁定当前信息 + public bool IsLocked { get; set; } + + /// + /// 获取或设置 所属项目编号 + /// + public Guid ProjectId { get; set; } + } +} diff --git a/src/OSharp.CodeGeneration/Services/Dtos/CodeProjectInputDto.cs b/src/OSharp.CodeGeneration/Services/Dtos/CodeProjectInputDto.cs new file mode 100644 index 0000000..3819ecd --- /dev/null +++ b/src/OSharp.CodeGeneration/Services/Dtos/CodeProjectInputDto.cs @@ -0,0 +1,62 @@ +// ----------------------------------------------------------------------- +// +// Copyright (c) 2014-2021 OSharp. All rights reserved. +// +// http://www.osharp.org +// 郭明锋 +// 2021-04-10 21:35 +// ----------------------------------------------------------------------- + +using System; +using System.ComponentModel.DataAnnotations; + +using OSharp.CodeGeneration.Services.Entities; +using OSharp.Entity; +using OSharp.Mapping; + + +namespace OSharp.CodeGeneration.Services.Dtos +{ + [MapTo(typeof(CodeProject))] + public class CodeProjectInputDto : IInputDto + { + /// 获取或设置 主键,唯一标识 + public Guid Id { get; set; } + + /// + /// 获取或设置 项目名称 + /// + [Required(), StringLength(200)] + public string Name { get; set; } + + /// + /// 获取或设置 项目命名空间前缀,通常形如“公司.项目” + /// + [Required(), StringLength(200)] + public string NamespacePrefix { get; set; } + + /// + /// 获取或设置 公司 + /// + [StringLength(200)] + public string Company { get; set; } + + /// + /// 获取或设置 站点地址 + /// + [StringLength(500)] + public string SiteUrl { get; set; } + + /// + /// 获取或设置 创建者 + /// + [StringLength(200)] + public string Creator { get; set; } + + /// + /// 获取或设置 Copyright + /// + [StringLength(500)] + public string Copyright { get; set; } + } +} diff --git a/src/OSharp.CodeGeneration/Services/Dtos/CodePropertyInputDto.cs b/src/OSharp.CodeGeneration/Services/Dtos/CodePropertyInputDto.cs new file mode 100644 index 0000000..f12913c --- /dev/null +++ b/src/OSharp.CodeGeneration/Services/Dtos/CodePropertyInputDto.cs @@ -0,0 +1,137 @@ +// ----------------------------------------------------------------------- +// +// Copyright (c) 2014-2021 OSharp. All rights reserved. +// +// http://www.osharp.org +// 郭明锋 +// 2021-04-10 21:59 +// ----------------------------------------------------------------------- + +using System; +using System.ComponentModel.DataAnnotations; + +using OSharp.CodeGeneration.Services.Entities; +using OSharp.Entity; +using OSharp.Mapping; + + +namespace OSharp.CodeGeneration.Services.Dtos +{ + [MapTo(typeof(CodeProperty))] + public class CodePropertyInputDto : IInputDto + { + /// 获取或设置 主键,唯一标识 + public Guid Id { get; set; } + + /// + /// 获取或设置 属性名称 + /// + [Required(), StringLength(200)] + public string Name { get; set; } + + /// + /// 获取或设置 显示名称 + /// + [StringLength(200)] + public string Display { get; set; } + + /// + /// 获取或设置 属性类型名称 + /// + [Required(), StringLength(500)] + public string TypeName { get; set; } + + /// + /// 获取或设置 是否可更新 + /// + public bool Updatable { get; set; } + + /// + /// 获取或设置 是否可排序 + /// + public bool Sortable { get; set; } + + /// + /// 获取或设置 是否可筛选 + /// + public bool Filterable { get; set; } + + /// + /// 获取或设置 是否必须 + /// + public bool? IsRequired { get; set; } + + /// + /// 获取或设置 最小长度 + /// + public int? MinLength { get; set; } + + /// + /// 获取或设置 最大长度 + /// + public int? MaxLength { get; set; } + + /// + /// 获取或设置 是否值类型可空 + /// + public bool IsNullable { get; set; } + + /// + /// 获取或设置 是否只读 + /// + public bool IsReadonly { get; set; } + + /// + /// 获取或设置 是否虚属性 + /// + public bool IsVirtual { get; set; } + + /// + /// 获取或设置 是否外键 + /// + public bool IsForeignKey { get; set; } + + /// + /// 获取或设置 是否导航属性 + /// + public bool IsNavigation { get; set; } + + /// + /// 获取或设置 关联实体 + /// + public string RelateEntity { get; set; } + + /// + /// 获取或设置 数据权限标识 + /// + public string DataAuthFlag { get; set; } + + /// + /// 获取或设置 是否包含在输入Dto + /// + public bool IsInputDto { get; set; } = true; + + /// + /// 获取或设置 是否包含在输出Dto + /// + public bool IsOutputDto { get; set; } = true; + + /// + /// 获取或设置 默认值 + /// + public string DefaultValue { get; set; } + + /// + /// 获取或设置 排序号 + /// + public int Order { get; set; } + + /// 获取或设置 是否锁定当前信息 + public bool IsLocked { get; set; } + + /// + /// 获取或设置 实体编号 + /// + public Guid EntityId { get; set; } + } +} diff --git a/src/OSharp.CodeGeneration/Services/Dtos/CodeTemplateInputDto.cs b/src/OSharp.CodeGeneration/Services/Dtos/CodeTemplateInputDto.cs new file mode 100644 index 0000000..1ab9972 --- /dev/null +++ b/src/OSharp.CodeGeneration/Services/Dtos/CodeTemplateInputDto.cs @@ -0,0 +1,69 @@ +// ----------------------------------------------------------------------- +// +// Copyright (c) 2014-2021 OSharp. All rights reserved. +// +// http://www.osharp.org +// 郭明锋 +// 2021-04-10 22:07 +// ----------------------------------------------------------------------- + +using System; +using System.ComponentModel.DataAnnotations; + +using OSharp.CodeGeneration.Generates; +using OSharp.Entity; + + +namespace OSharp.CodeGeneration.Services.Dtos +{ + public class CodeTemplateInputDto : IInputDto + { + /// 获取或设置 主键,唯一标识 + public Guid Id { get; set; } + + /// + /// 获取或设置 配置名称 + /// + [Required, StringLength(200)] + public string Name { get; set; } + + /// + /// 获取或设置 元数据类型 + /// + public MetadataType MetadataType { get; set; } + + /// + /// 获取或设置 模板文件,默认内置,也可以由用户自定义加载 + /// + [Required, StringLength(500)] + public string TemplateFile { get; set; } + + /// + /// 获取或设置 排序 + /// + public int Order { get; set; } + + /// + /// 获取或设置 代码输出文件名格式 + /// + [Required, StringLength(300)] + public string OutputFileFormat { get; set; } + + /// + /// 获取或设置 是否只生成一次 + /// + public bool IsOnce { get; set; } + + /// + /// 获取或设置 系统类型 + /// + public bool IsSystem { get; set; } + + /// 获取或设置 是否锁定当前信息 + public bool IsLocked { get; set; } + + /// 获取或设置 创建时间 + public DateTime CreatedTime { get; set; } + + } +} diff --git a/src/OSharp.CodeGeneration/Services/Entities/CodeTemplate.cs b/src/OSharp.CodeGeneration/Services/Entities/CodeTemplate.cs index f3e1f36..83bb803 100644 --- a/src/OSharp.CodeGeneration/Services/Entities/CodeTemplate.cs +++ b/src/OSharp.CodeGeneration/Services/Entities/CodeTemplate.cs @@ -25,7 +25,7 @@ namespace OSharp.CodeGeneration.Services.Entities /// [Description("代码模板")] [TableNamePrefix("CodeGen")] - public class CodeTemplate : EntityBase, ILockable + public class CodeTemplate : EntityBase, ILockable, ICreatedTime { /// /// 获取或设置 配置名称 @@ -68,6 +68,9 @@ namespace OSharp.CodeGeneration.Services.Entities /// 获取或设置 是否锁定当前信息 public bool IsLocked { get; set; } + /// 获取或设置 创建时间 + public DateTime CreatedTime { get; set; } + /// /// 获取或设置 项目模板集合 /// @@ -110,7 +113,7 @@ namespace OSharp.CodeGeneration.Services.Entities case "ng_Alain其他数据": return typeof(ng_AlainOther); default: - return null; + return null; } } @@ -147,5 +150,6 @@ namespace OSharp.CodeGeneration.Services.Entities .Replace("{Module.Name}", entity.Module.Name).Replace("{Entity.Name}", entity.Name); return fileName; } + } } diff --git a/src/OSharp.CodeGeneration/Services/IDataContract.cs b/src/OSharp.CodeGeneration/Services/IDataContract.cs index b4e3bf1..225cfbb 100644 --- a/src/OSharp.CodeGeneration/Services/IDataContract.cs +++ b/src/OSharp.CodeGeneration/Services/IDataContract.cs @@ -12,6 +12,7 @@ using System.Linq; using System.Linq.Expressions; using System.Threading.Tasks; +using OSharp.CodeGeneration.Services.Dtos; using OSharp.CodeGeneration.Services.Entities; using OSharp.Data; @@ -44,20 +45,20 @@ namespace OSharp.CodeGeneration.Services /// 检查谓语表达式 /// 项目信息集合 CodeProject[] GetCodeProject(Expression>predicate); - + /// /// 添加项目信息信息 /// - /// 要添加的项目信息 + /// 要添加的项目信息DTO信息 /// 业务操作结果 - Task CreateCodeProjects(params CodeProject[] projects); + Task CreateCodeProjects(params CodeProjectInputDto[] dtos); /// /// 更新项目信息信息 /// - /// 包含更新信息的项目信息 + /// 包含更新信息的项目信息DTO信息 /// 业务操作结果 - Task UpdateCodeProjects(params CodeProject[] projects); + Task UpdateCodeProjects(params CodeProjectInputDto[] dtos); /// /// 删除项目信息信息 @@ -67,7 +68,7 @@ namespace OSharp.CodeGeneration.Services Task DeleteCodeProjects(params Guid[] ids); #endregion - + #region 代码模块信息业务 /// @@ -86,19 +87,19 @@ namespace OSharp.CodeGeneration.Services /// /// 更新代码模块信息信息 /// - /// 包含更新信息的代码模块信息 + /// 包含更新信息的代码模块信息DTO信息 /// 业务操作结果 - Task UpdateCodeModules(params CodeModule[] modules); - + Task UpdateCodeModules(params CodeModuleInputDto[] dtos); + /// /// 删除代码模块信息信息 /// /// 要删除的代码模块信息编号 /// 业务操作结果 Task DeleteCodeModules(params Guid[] ids); - + #endregion - + #region 代码实体信息业务 /// @@ -113,13 +114,13 @@ namespace OSharp.CodeGeneration.Services /// 更新的代码实体信息编号 /// 代码实体信息是否存在 Task CheckCodeEntityExists(Expression> predicate, Guid id = default); - + /// /// 更新代码实体信息信息 /// - /// 包含更新信息的代码实体信息 + /// 包含更新信息的代码实体信息DTO信息 /// 业务操作结果 - Task UpdateCodeEntities(params CodeEntity[] entities); + Task UpdateCodeEntities(params CodeEntityInputDto[] dtos); /// /// 删除代码实体信息信息 @@ -129,7 +130,7 @@ namespace OSharp.CodeGeneration.Services Task DeleteCodeEntities(params Guid[] ids); #endregion - + #region 实体属性信息业务 /// @@ -148,9 +149,9 @@ namespace OSharp.CodeGeneration.Services /// /// 更新实体属性信息信息 /// - /// 包含更新信息的实体属性信息 + /// 包含更新信息的实体属性信息输入DTO /// 业务操作结果 - Task UpdateCodeProperties(params CodeProperty[] properties); + Task UpdateCodeProperties(params CodePropertyInputDto[] dtos); /// /// 删除实体属性信息信息 @@ -175,14 +176,14 @@ namespace OSharp.CodeGeneration.Services /// 更新的实体外键信息编号 /// 实体外键信息是否存在 Task CheckCodeForeignExists(Expression> predicate, Guid id = default); - + /// /// 更新实体外键信息信息 /// - /// 包含更新信息的实体外键信息 + /// 包含更新信息的实体外键信息输入DTO /// 业务操作结果 - Task UpdateCodeForeigns(params CodeForeign[] foreigns); - + Task UpdateCodeForeigns(params CodeForeignInputDto[] dtos); + /// /// 删除实体外键信息信息 /// @@ -212,7 +213,7 @@ namespace OSharp.CodeGeneration.Services /// /// 包含更新信息的代码模板信息 /// 业务操作结果 - Task UpdateCodeTemplates(params CodeTemplate[] settings); + Task UpdateCodeTemplates(params CodeTemplateInputDto[] settings); /// /// 删除代码模板信息信息 diff --git a/src/OSharp.CodeGenerator/Views/Entities/EntityListViewModel.cs b/src/OSharp.CodeGenerator/Views/Entities/EntityListViewModel.cs index ac643fb..bfc53ec 100644 --- a/src/OSharp.CodeGenerator/Views/Entities/EntityListViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Entities/EntityListViewModel.cs @@ -18,6 +18,7 @@ using Microsoft.Extensions.DependencyInjection; using Notifications.Wpf.Core; using OSharp.CodeGeneration.Services; +using OSharp.CodeGeneration.Services.Dtos; using OSharp.CodeGeneration.Services.Entities; using OSharp.CodeGenerator.Data; using OSharp.CodeGenerator.Views.Modules; @@ -95,12 +96,12 @@ namespace OSharp.CodeGenerator.Views.Entities Entities[i].Order = i + 1; } - CodeEntity[] entities = Entities.Select(m => m.ToEntity()).ToArray(); + CodeEntityInputDto[] dtos = Entities.Select(m => m.MapTo()).ToArray(); OperationResult result = null; await _provider.ExecuteScopedWorkAsync(async provider => { IDataContract contract = provider.GetRequiredService(); - result = await contract.UpdateCodeEntities(entities); + result = await contract.UpdateCodeEntities(dtos); }); Helper.Notify(result); if (!result.Succeeded) diff --git a/src/OSharp.CodeGenerator/Views/Entities/EntityViewModel.cs b/src/OSharp.CodeGenerator/Views/Entities/EntityViewModel.cs index 86ddbc6..d111d1b 100644 --- a/src/OSharp.CodeGenerator/Views/Entities/EntityViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Entities/EntityViewModel.cs @@ -15,6 +15,7 @@ using FluentValidation; using MahApps.Metro.Controls; +using OSharp.CodeGeneration.Services.Dtos; using OSharp.CodeGeneration.Services.Entities; using OSharp.CodeGenerator.Data; using OSharp.CodeGenerator.Views.Modules; @@ -26,7 +27,7 @@ using Stylet; namespace OSharp.CodeGenerator.Views.Entities { - [MapTo(typeof(CodeEntity))] + [MapTo(typeof(CodeEntityInputDto))] [MapFrom(typeof(CodeEntity))] public class EntityViewModel : Screen { @@ -75,12 +76,6 @@ namespace OSharp.CodeGenerator.Views.Entities public int Order { get; set; } public DateTime CreatedTime { get; set; } - - public CodeEntity ToEntity() - { - CodeEntity entity = this.MapTo(); - return entity; - } public void ForeignKey() { diff --git a/src/OSharp.CodeGenerator/Views/Modules/ModuleListViewModel.cs b/src/OSharp.CodeGenerator/Views/Modules/ModuleListViewModel.cs index 0bccf71..40d38ad 100644 --- a/src/OSharp.CodeGenerator/Views/Modules/ModuleListViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Modules/ModuleListViewModel.cs @@ -18,6 +18,7 @@ using Microsoft.Extensions.DependencyInjection; using Notifications.Wpf.Core; using OSharp.CodeGeneration.Services; +using OSharp.CodeGeneration.Services.Dtos; using OSharp.CodeGeneration.Services.Entities; using OSharp.CodeGenerator.Data; using OSharp.CodeGenerator.Views.Projects; @@ -99,12 +100,12 @@ namespace OSharp.CodeGenerator.Views.Modules Modules[i].Order = i + 1; } - CodeModule[] modules = Modules.Select(m => m.ToModule()).ToArray(); + CodeModuleInputDto[] dtos = Modules.Select(m => m.MapTo()).ToArray(); OperationResult result = null; await _provider.ExecuteScopedWorkAsync(async provider => { IDataContract contract = provider.GetRequiredService(); - result = await contract.UpdateCodeModules(modules); + result = await contract.UpdateCodeModules(dtos); }); Helper.Notify(result); if (!result.Succeeded) diff --git a/src/OSharp.CodeGenerator/Views/Modules/ModuleViewModel.cs b/src/OSharp.CodeGenerator/Views/Modules/ModuleViewModel.cs index ca67389..ffa92e8 100644 --- a/src/OSharp.CodeGenerator/Views/Modules/ModuleViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Modules/ModuleViewModel.cs @@ -15,6 +15,7 @@ using FluentValidation; using Microsoft.Extensions.DependencyInjection; using OSharp.CodeGeneration.Services; +using OSharp.CodeGeneration.Services.Dtos; using OSharp.CodeGeneration.Services.Entities; using OSharp.CodeGenerator.Data; using OSharp.CodeGenerator.Views.Projects; @@ -27,7 +28,7 @@ using Stylet; namespace OSharp.CodeGenerator.Views.Modules { - [MapTo(typeof(CodeModule))] + [MapTo(typeof(CodeModuleInputDto))] [MapFrom(typeof(CodeModule))] public class ModuleViewModel : Screen { @@ -57,12 +58,6 @@ namespace OSharp.CodeGenerator.Views.Modules public string Namespace => $"{(Project == null ? "" : Project.NamespacePrefix + ".")}{Name}"; public ProjectViewModel Project { get; set; } - - public CodeModule ToModule() - { - CodeModule module = this.MapTo(); - return module; - } public async void Delete() { diff --git a/src/OSharp.CodeGenerator/Views/Projects/ProjectViewModel.cs b/src/OSharp.CodeGenerator/Views/Projects/ProjectViewModel.cs index 468ab5c..1bb8664 100644 --- a/src/OSharp.CodeGenerator/Views/Projects/ProjectViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Projects/ProjectViewModel.cs @@ -21,6 +21,7 @@ using Microsoft.Extensions.DependencyInjection; using Notifications.Wpf.Core; using OSharp.CodeGeneration.Services; +using OSharp.CodeGeneration.Services.Dtos; using OSharp.CodeGeneration.Services.Entities; using OSharp.CodeGenerator.Data; using OSharp.CodeGenerator.Views.Modules; @@ -113,14 +114,14 @@ namespace OSharp.CodeGenerator.Views.Projects return; } - CodeProject project = ToProject(); + CodeProjectInputDto dto = this.MapTo(); OperationResult result = null; await _serviceProvider.ExecuteScopedWorkAsync(async provider => { IDataContract contract = provider.GetRequiredService(); - result = project.Id == default - ? await contract.CreateCodeProjects(project) - : await contract.UpdateCodeProjects(project); + result = dto.Id == default + ? await contract.CreateCodeProjects(dto) + : await contract.UpdateCodeProjects(dto); }); Helper.Notify(result); if (!result.Succeeded) @@ -153,12 +154,7 @@ namespace OSharp.CodeGenerator.Views.Projects // Fody 无法编织其他组件,所以我们必须手动提高这个值 this.NotifyOfPropertyChange(() => CanEditSave); } - - public CodeProject ToProject() - { - CodeProject project = this.MapTo(); - return project; - } + } diff --git a/src/OSharp.CodeGenerator/Views/Properties/PropertyListViewModel.cs b/src/OSharp.CodeGenerator/Views/Properties/PropertyListViewModel.cs index 85c7053..e8f4e9b 100644 --- a/src/OSharp.CodeGenerator/Views/Properties/PropertyListViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Properties/PropertyListViewModel.cs @@ -18,6 +18,7 @@ using Microsoft.Extensions.DependencyInjection; using Notifications.Wpf.Core; using OSharp.CodeGeneration.Services; +using OSharp.CodeGeneration.Services.Dtos; using OSharp.CodeGeneration.Services.Entities; using OSharp.CodeGenerator.Data; using OSharp.CodeGenerator.Views.Entities; @@ -95,12 +96,12 @@ namespace OSharp.CodeGenerator.Views.Properties Properties[i].Order = i + 1; } - CodeProperty[] properties = Properties.Select(m => m.ToProperty()).ToArray(); + CodePropertyInputDto[] dtos = Properties.Select(m => m.MapTo()).ToArray(); OperationResult result = null; await _provider.ExecuteScopedWorkAsync(async provider => { IDataContract contract = provider.GetRequiredService(); - result = await contract.UpdateCodeProperties(properties); + result = await contract.UpdateCodeProperties(dtos); }); Helper.Notify(result); if (!result.Succeeded) diff --git a/src/OSharp.CodeGenerator/Views/Properties/PropertyViewModel.cs b/src/OSharp.CodeGenerator/Views/Properties/PropertyViewModel.cs index fe5e6cb..ac3d35e 100644 --- a/src/OSharp.CodeGenerator/Views/Properties/PropertyViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Properties/PropertyViewModel.cs @@ -11,6 +11,7 @@ using System; using FluentValidation; +using OSharp.CodeGeneration.Services.Dtos; using OSharp.CodeGeneration.Services.Entities; using OSharp.CodeGenerator.Data; using OSharp.CodeGenerator.Views.Entities; @@ -21,7 +22,7 @@ using Stylet; namespace OSharp.CodeGenerator.Views.Properties { - [MapTo(typeof(CodeProperty))] + [MapTo(typeof(CodePropertyInputDto))] [MapFrom(typeof(CodeProperty))] public class PropertyViewModel : Screen { @@ -80,13 +81,7 @@ namespace OSharp.CodeGenerator.Views.Properties public int Order { get; set; } public DateTime CreatedTime { get; set; } - - public CodeProperty ToProperty() - { - CodeProperty property = this.MapTo(); - return property; - } - + public void Up() { Helper.Output($"“{Name}” - Up"); -- Gitee