ModelBuilderExtension.cs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. using Abp.Json;
  2. using Microsoft.EntityFrameworkCore;
  3. using System.Collections.Generic;
  4. using VberZero.Workflow.DesignInfo;
  5. using VberZero.Workflow.Persistence;
  6. namespace VberZero.Workflow;
  7. public static class ModelBuilderExtension
  8. {
  9. public static ModelBuilder ConfigWorkflow(this ModelBuilder modelBuilder)
  10. {
  11. modelBuilder
  12. .ConfigWorkflowDefinition()
  13. .ConfigWorkflowPersistence();
  14. return modelBuilder;
  15. }
  16. private static ModelBuilder ConfigWorkflowDefinition(this ModelBuilder modelBuilder)
  17. {
  18. var builder = modelBuilder.Entity<WorkflowDefinitionInfo>();
  19. builder.Property(u => u.Id).HasColumnName(nameof(WorkflowDefinitionInfo.Id)).HasMaxLength(WorkflowDefinitionConst.IdMaxLength);
  20. builder.Property(u => u.Version).HasColumnName(nameof(WorkflowDefinitionInfo.Version)).HasDefaultValue(1);
  21. builder.HasKey(u => new { u.Id, u.Version });
  22. builder.Property(u => u.Title).HasColumnName(nameof(WorkflowDefinitionInfo.Title)).HasMaxLength(WorkflowDefinitionConst.TitleMaxLength);
  23. builder.Property(u => u.Group).HasColumnName(nameof(WorkflowDefinitionInfo.Group)).HasMaxLength(WorkflowDefinitionConst.GroupMaxLength);
  24. builder.Property(u => u.Icon).HasColumnName(nameof(WorkflowDefinitionInfo.Icon)).HasMaxLength(WorkflowDefinitionConst.IconMaxLength);
  25. builder.Property(u => u.Color).HasColumnName(nameof(WorkflowDefinitionInfo.Color)).HasMaxLength(WorkflowDefinitionConst.ColorMaxLength);
  26. builder.Property(u => u.Inputs).HasColumnName(nameof(WorkflowDefinitionInfo.Inputs)).HasConversion(u => u.ToJsonString(false, false), u => u.FromJsonString<IEnumerable<IEnumerable<WorkflowFormData>>>());
  27. builder.Property(u => u.Nodes).HasColumnName(nameof(WorkflowDefinitionInfo.Nodes)).HasConversion(u => u.ToJsonString(false, false), u => u.FromJsonString<IEnumerable<WorkflowNode>>());
  28. builder.Property(u => u.TenantId).HasColumnName(nameof(WorkflowDefinitionInfo.TenantId));
  29. return modelBuilder;
  30. }
  31. private static ModelBuilder ConfigWorkflowPersistence(this ModelBuilder modelBuilder)
  32. {
  33. var builder = modelBuilder.Entity<WorkflowInfo>();
  34. builder.Property(u => u.WorkflowDefinitionId).HasColumnName(nameof(WorkflowInfo.WorkflowDefinitionId)).HasMaxLength(WorkflowConst.WorkflowDefinitionIdMaxLength);
  35. builder.Property(u => u.Version).HasColumnName(nameof(WorkflowInfo.Version));
  36. builder.Property(u => u.Description).HasColumnName(nameof(WorkflowInfo.Description)).HasMaxLength(WorkflowConst.DescriptionMaxLength);
  37. builder.Property(u => u.Reference).HasColumnName(nameof(WorkflowInfo.Reference)).HasMaxLength(WorkflowConst.ReferenceMaxLength);
  38. builder.Property(u => u.NextExecution).HasColumnName(nameof(WorkflowInfo.NextExecution));
  39. builder.Property(u => u.Data).HasColumnName(nameof(WorkflowInfo.Data)).HasMaxLength(WorkflowConst.DataMaxLength);
  40. builder.Property(u => u.CreateTime).HasColumnName(nameof(WorkflowInfo.CreateTime));
  41. builder.Property(u => u.CompleteTime).HasColumnName(nameof(WorkflowInfo.CompleteTime));
  42. builder.Property(u => u.Status).HasColumnName(nameof(WorkflowInfo.Status));
  43. builder.Property(u => u.TenantId).HasColumnName(nameof(WorkflowInfo.TenantId));
  44. //builder.Property(u => u.ExecutionPointers).HasColumnName(nameof(WorkflowInfo.ExecutionPointers));
  45. //builder.HasMany(a => a.ExecutionPointers);
  46. builder.HasOne(u => u.WorkflowDefinitionInfo).WithMany().HasForeignKey(u => new { u.WorkflowDefinitionId, u.Version });
  47. return modelBuilder;
  48. }
  49. }