From a8b475881959d4a88d821951a615f03e7d0d1725 Mon Sep 17 00:00:00 2001
From: sunpengfei <i@angelzzz.com>
Date: 星期四, 07 八月 2025 13:28:30 +0800
Subject: [PATCH] feat:字典优化

---
 FlexJobApi.Core/Models/Main/Dictionaries/Commands/SaveDictionaryDataCommand.cs            |   10 
 FlexJobApi.Core/Entities/Tasks/TaskInfo.cs                                                |   39 
 FlexJobApi.Application/FlexJobApi.Application.xml                                         |   10 
 FlexJobApi.Core/Entities/Users/Enterprise.cs                                              |   41 
 FlexJobApi.Core/Entities/Users/UserInfo.cs                                                |   47 
 FlexJobApi.Core/Entities/Tasks/TaskInfoBenefit.cs                                         |   11 
 FlexJobApi.Core/Entities/Users/UserInfoExpectJob.cs                                       |   22 
 FlexJobApi.Database.Migrations/Migrations/20250807051431_UpdateDictionaryData.Designer.cs | 1832 +++++++++++++++++++++++++++++++++
 FlexJobApi.Core/Entities/Common/DictionaryData.cs                                         |    2 
 FlexJobApi.Core/FlexJobApi.Core.xml                                                       |   67 
 FlexJobApi.Application/Dictionaries/Commands/DictionaryCategoryCommandHandler.cs          |   28 
 FlexJobApi.Database.Migrations/REDEME.MD                                                  |    2 
 FlexJobApi.User.Application/Enterprises/Queries/EnterprisesQueryHandler.cs                |    6 
 FlexJobApi.Core/Entities/Users/UserInfoCredential.cs                                      |   22 
 FlexJobApi.Application/Dictionaries/Commands/DictionaryDataCommandHandler.cs              |   28 
 FlexJobApi.Database.Migrations/Migrations/DefaultDbContextModelSnapshot.cs                |  147 +
 FlexJobApi.Core/Entities/Tasks/TaskInfoCredentialLimit.cs                                 |   24 
 FlexJobApi.Database.Migrations/Migrations/20250807051431_UpdateDictionaryData.cs          |  847 +++++++++++++++
 18 files changed, 3,058 insertions(+), 127 deletions(-)

diff --git a/FlexJobApi.Application/Dictionaries/Commands/DictionaryCategoryCommandHandler.cs b/FlexJobApi.Application/Dictionaries/Commands/DictionaryCategoryCommandHandler.cs
index c28aaeb..e334e79 100644
--- a/FlexJobApi.Application/Dictionaries/Commands/DictionaryCategoryCommandHandler.cs
+++ b/FlexJobApi.Application/Dictionaries/Commands/DictionaryCategoryCommandHandler.cs
@@ -1,4 +1,7 @@
 锘縰sing FlexJobApi.Core;
+using Furion.DatabaseAccessor;
+using Furion.FriendlyException;
+using Mapster;
 using MediatR;
 using System;
 using System.Collections.Generic;
@@ -11,10 +14,16 @@
     /// <summary>
     /// 瀛楀吀绫诲埆鍛戒护澶勭悊鍣�
     /// </summary>
-    public class DictionaryCategoryCommandHandler :
+    public class DictionaryCategoryCommandHandler(
+            IRepository<DictionaryCategory> rep,
+            IRepository<DictionaryData> repDictionaryData
+        ) :
         IRequestHandler<DeleteDictionaryCategoryCommand, int>,
         IRequestHandler<SaveDictionaryCategoryCommand, Guid>
     {
+        private readonly IRepository<DictionaryCategory> rep = rep;
+        private readonly IRepository<DictionaryData> repDictionaryData = repDictionaryData;
+
         /// <summary>
         /// 鍒犻櫎鏁版嵁瀛楀吀绫诲埆
         /// </summary>
@@ -32,12 +41,27 @@
         /// <param name="request"></param>
         /// <param name="cancellationToken"></param>
         /// <returns></returns>
+        [UnitOfWork]
         public Task<Guid> Handle(SaveDictionaryCategoryCommand request, CancellationToken cancellationToken)
         {
             return request.SaveData<DictionaryCategory, SaveDictionaryCategoryCommand>(
                  null,
                  it => it.Id != request.Id && it.Code == request.Code,
-                 null,
+                 (entity) =>
+                 {
+                     if (request.Id.HasValue && entity.Code != request.Code)
+                     {
+                         throw Oops.Oh(EnumErrorCodeType.s400, "缂栧彿涓嶅彲淇敼");
+                         //var data = repDictionaryData.AsQueryable()
+                         //   .Where(it => it.CategoryId == entity.Id)
+                         //   .ToList();
+                         //foreach (var item in data)
+                         //{
+                         //    item.Code = item.Code.Replace($"{entity.Code}-", $"{request.Code}-");
+                         //}
+                     }
+                     request.Adapt(entity);
+                 },
                  cancellationToken);
         }
     }
diff --git a/FlexJobApi.Application/Dictionaries/Commands/DictionaryDataCommandHandler.cs b/FlexJobApi.Application/Dictionaries/Commands/DictionaryDataCommandHandler.cs
index 64ebaff..0dce231 100644
--- a/FlexJobApi.Application/Dictionaries/Commands/DictionaryDataCommandHandler.cs
+++ b/FlexJobApi.Application/Dictionaries/Commands/DictionaryDataCommandHandler.cs
@@ -1,7 +1,9 @@
 锘縰sing FlexJobApi.Core;
 using Furion.DatabaseAccessor;
+using Furion.FriendlyException;
 using Mapster;
 using MediatR;
+using Microsoft.EntityFrameworkCore;
 using System;
 using System.Collections.Generic;
 using System.IO;
@@ -14,32 +16,48 @@
     /// <summary>
     /// 鏁版嵁瀛楀吀鍛戒护澶勭悊鍣�
     /// </summary>
-    public class DictionaryDataCommandHandler :
+    public class DictionaryDataCommandHandler(
+            IRepository<DictionaryData> rep,
+            IRepository<DictionaryCategory> repDictionaryCategory
+        ) :
         IRequestHandler<SaveDictionaryDataCommand, Guid>,
         IRequestHandler<SetDictionaryDataIsDisabledCommand, int>
 
     {
+        private readonly IRepository<DictionaryData> rep = rep;
+        private readonly IRepository<DictionaryCategory> repDictionaryCategory = repDictionaryCategory;
+
         /// <summary>
         /// 淇濆瓨鏁版嵁瀛楀吀
         /// </summary>
         /// <param name="request"></param>
         /// <param name="cancellationToken"></param>
         /// <returns></returns>
-        public Task<Guid> Handle(SaveDictionaryDataCommand request, CancellationToken cancellationToken)
+        public async Task<Guid> Handle(SaveDictionaryDataCommand request, CancellationToken cancellationToken)
         {
-            return request.SaveData<DictionaryData, SaveDictionaryDataCommand>(
+            var category = await repDictionaryCategory
+                .Where(it => it.Id == request.CategoryId || it.Code == request.CategoryCode)
+                .Select(it => new
+                {
+                    it.Id,
+                    it.Code
+                })
+                .FirstOrDefaultAsync();
+            if (category == null) throw Oops.Oh(EnumErrorCodeType.s404, "鏁版嵁瀛楀吀绫诲埆");
+            request.CategoryId = category.Id;
+            if (!request.Code.StartsWith($"{request.CategoryCode}-")) throw Oops.Oh(EnumErrorCodeType.s400, "缂栧彿寮�澶撮渶瑕佸寘鍚被鍒紪鍙�-");
+            return await request.SaveData<DictionaryData, SaveDictionaryDataCommand>(
                 null,
                 it =>
                     it.CategoryId == request.CategoryId
-                    && it.ParentId == request.ParentId
                     && it.Code == request.Code
-                    && it.Content == request.Content
                     && it.Id != request.Id,
                 (entity) =>
                 {
                     entity.Path = DbUtils.GetTreeDataPath<DictionaryData>(request.ParentId, cancellationToken).Result;
                     if (request.Id.HasValue)
                     {
+                        if (entity.Code != request.Code) throw Oops.Oh(EnumErrorCodeType.s400, "缂栧彿涓嶅彲淇敼");
                         DbUtils.UpdateTreeDataChildrenPath<DictionaryData>(
                            $"{entity.Path}/{entity.Code}/",
                            $"{entity.Path}/{request.Code}/",
diff --git a/FlexJobApi.Application/FlexJobApi.Application.xml b/FlexJobApi.Application/FlexJobApi.Application.xml
index adb41b2..89b8cb5 100644
--- a/FlexJobApi.Application/FlexJobApi.Application.xml
+++ b/FlexJobApi.Application/FlexJobApi.Application.xml
@@ -9,6 +9,11 @@
             瀛楀吀绫诲埆鍛戒护澶勭悊鍣�
             </summary>
         </member>
+        <member name="M:FlexJobApi.Application.DictionaryCategoryCommandHandler.#ctor(Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.DictionaryCategory},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.DictionaryData})">
+            <summary>
+            瀛楀吀绫诲埆鍛戒护澶勭悊鍣�
+            </summary>
+        </member>
         <member name="M:FlexJobApi.Application.DictionaryCategoryCommandHandler.Handle(FlexJobApi.Core.DeleteDictionaryCategoryCommand,System.Threading.CancellationToken)">
             <summary>
             鍒犻櫎鏁版嵁瀛楀吀绫诲埆
@@ -30,6 +35,11 @@
             鏁版嵁瀛楀吀鍛戒护澶勭悊鍣�
             </summary>
         </member>
+        <member name="M:FlexJobApi.Application.DictionaryDataCommandHandler.#ctor(Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.DictionaryData},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.DictionaryCategory})">
+            <summary>
+            鏁版嵁瀛楀吀鍛戒护澶勭悊鍣�
+            </summary>
+        </member>
         <member name="M:FlexJobApi.Application.DictionaryDataCommandHandler.Handle(FlexJobApi.Core.SaveDictionaryDataCommand,System.Threading.CancellationToken)">
             <summary>
             淇濆瓨鏁版嵁瀛楀吀
diff --git a/FlexJobApi.Core/Entities/Common/DictionaryData.cs b/FlexJobApi.Core/Entities/Common/DictionaryData.cs
index ca477ff..bd142cd 100644
--- a/FlexJobApi.Core/Entities/Common/DictionaryData.cs
+++ b/FlexJobApi.Core/Entities/Common/DictionaryData.cs
@@ -54,6 +54,7 @@
         /// 缂栧彿
         /// </summary>
         [MaxLength(128)]
+        [Required]
         public string Code { get; set; }
 
         /// <summary>
@@ -94,6 +95,7 @@
 
         public void Configure(EntityTypeBuilder<DictionaryData> entityBuilder, DbContext dbContext, Type dbContextLocator)
         {
+            entityBuilder.HasIndex(x => x.Code).IsUnique();
             entityBuilder
                 .HasMany(x => x.Children)
                 .WithOne(x => x.Parent)
diff --git a/FlexJobApi.Core/Entities/Tasks/TaskInfo.cs b/FlexJobApi.Core/Entities/Tasks/TaskInfo.cs
index 8dbfac7..bcff36b 100644
--- a/FlexJobApi.Core/Entities/Tasks/TaskInfo.cs
+++ b/FlexJobApi.Core/Entities/Tasks/TaskInfo.cs
@@ -1,4 +1,7 @@
-锘縰sing System;
+锘縰sing Furion.DatabaseAccessor;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Metadata.Builders;
+using System;
 using System.Collections.Generic;
 using System.ComponentModel.DataAnnotations;
 using System.Linq;
@@ -10,7 +13,7 @@
     /// <summary>
     /// 浠诲姟淇℃伅
     /// </summary>
-    public class TaskInfo : CommonEntity
+    public class TaskInfo : CommonEntity, IEntityTypeBuilder<TaskInfo>
     {
         public TaskInfo()
         {
@@ -75,12 +78,22 @@
         public List<TaskInfoCredentialLimit> CredentialLimits { get; set; }
 
         /// <summary>
-        /// 浠诲姟鍦扮偣鎵�灞炲尯鍩烮d
+        /// 浠诲姟鍦扮偣鎵�灞炵渷浠界紪鍙�
         /// </summary>
-        public Guid CityId { get; set; }
+        public string ProvinceCode { get; set; }
 
         /// <summary>
-        /// 浠诲姟鍦扮偣鎵�灞炲尯鍩�
+        /// 浠诲姟鍦扮偣鎵�灞炵渷浠�
+        /// </summary>
+        public DictionaryData Province { get; set; }
+
+        /// <summary>
+        /// 浠诲姟鍦扮偣鎵�灞炲煄甯傜紪鍙�
+        /// </summary>
+        public string CityCode { get; set; }
+
+        /// <summary>
+        /// 浠诲姟鍦扮偣鎵�灞炲煄甯�
         /// </summary>
         public DictionaryData City { get; set; }
 
@@ -98,5 +111,21 @@
         /// 浠诲姟缁撴潫鏃堕棿
         /// </summary>
         public DateTime EndTime { get; set; }
+
+        public void Configure(EntityTypeBuilder<TaskInfo> entityBuilder, DbContext dbContext, Type dbContextLocator)
+        {
+            entityBuilder
+                .HasOne(it => it.Province)
+                .WithMany()
+                .HasForeignKey(it => it.ProvinceCode)
+                .HasPrincipalKey(it => it.Code)
+                .OnDelete(DeleteBehavior.Restrict);
+            entityBuilder
+                .HasOne(it => it.City)
+                .WithMany()
+                .HasForeignKey(it => it.CityCode)
+                .HasPrincipalKey(it => it.Code)
+                .OnDelete(DeleteBehavior.Restrict);
+        }
     }
 }
diff --git a/FlexJobApi.Core/Entities/Tasks/TaskInfoBenefit.cs b/FlexJobApi.Core/Entities/Tasks/TaskInfoBenefit.cs
index 2b8dcc7..159327d 100644
--- a/FlexJobApi.Core/Entities/Tasks/TaskInfoBenefit.cs
+++ b/FlexJobApi.Core/Entities/Tasks/TaskInfoBenefit.cs
@@ -25,9 +25,9 @@
         public TaskInfo TaskInfo { get; set; }
 
         /// <summary>
-        /// 绂忓埄Id
+        /// 绂忓埄缂栧彿
         /// </summary>
-        public Guid BenefitId { get; set; }
+        public string BenefitCode { get; set; }
 
         /// <summary>
         /// 绂忓埄
@@ -42,6 +42,13 @@
                 .HasForeignKey(it => it.TaskInfoId)
                 .IsRequired()
                 .OnDelete(DeleteBehavior.Restrict);
+            entityBuilder
+                .HasOne(it => it.Benefit)
+                .WithMany()
+                .HasForeignKey(it => it.BenefitCode)
+                .HasPrincipalKey(it => it.Code)
+                .IsRequired()
+                .OnDelete(DeleteBehavior.Restrict);
         }
     }
 }
diff --git a/FlexJobApi.Core/Entities/Tasks/TaskInfoCredentialLimit.cs b/FlexJobApi.Core/Entities/Tasks/TaskInfoCredentialLimit.cs
index 5e178d1..3bf4d7b 100644
--- a/FlexJobApi.Core/Entities/Tasks/TaskInfoCredentialLimit.cs
+++ b/FlexJobApi.Core/Entities/Tasks/TaskInfoCredentialLimit.cs
@@ -1,12 +1,16 @@
-锘縰sing System;
+锘縰sing Furion.DatabaseAccessor;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Metadata.Builders;
+using System;
 using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
 
 namespace FlexJobApi.Core
 {
-    public class TaskInfoCredentialLimit : CommonEntity
+    public class TaskInfoCredentialLimit : CommonEntity, IEntityTypeBuilder<TaskInfoCredentialLimit>
     {
         /// <summary>
         /// 浠诲姟Id
@@ -19,13 +23,25 @@
         public TaskInfo TaskInfo { get; set; }
 
         /// <summary>
-        /// 璇佷功绫诲瀷Id
+        /// 璇佷功绫诲瀷缂栧彿
         /// </summary>
-        public Guid? TypeId { get; set; }
+        [Required]
+        public string TypeCode { get; set; }
 
         /// <summary>
         /// 璇佷功绫诲瀷
         /// </summary>
         public DictionaryData Type { get; set; }
+
+        public void Configure(EntityTypeBuilder<TaskInfoCredentialLimit> entityBuilder, DbContext dbContext, Type dbContextLocator)
+        {
+            entityBuilder
+                .HasOne(it => it.Type)
+                .WithMany()
+                .HasForeignKey(it => it.TypeCode)
+                .HasPrincipalKey(it => it.Code)
+                .IsRequired()
+                .OnDelete(DeleteBehavior.Restrict);
+        }
     }
 }
diff --git a/FlexJobApi.Core/Entities/Users/Enterprise.cs b/FlexJobApi.Core/Entities/Users/Enterprise.cs
index 035e637..65ac6ef 100644
--- a/FlexJobApi.Core/Entities/Users/Enterprise.cs
+++ b/FlexJobApi.Core/Entities/Users/Enterprise.cs
@@ -1,4 +1,7 @@
-锘縰sing System;
+锘縰sing Furion.DatabaseAccessor;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Metadata.Builders;
+using System;
 using System.Collections.Generic;
 using System.ComponentModel.DataAnnotations;
 using System.Linq;
@@ -10,7 +13,7 @@
     /// <summary>
     /// 浼佷笟
     /// </summary>
-    public class Enterprise : CommonEntity
+    public class Enterprise : CommonEntity, IEntityTypeBuilder<Enterprise>
     {
         public Enterprise()
         {
@@ -29,9 +32,9 @@
         public EnterpriseAuth EnterpriseAuth { get; set; }
 
         /// <summary>
-        /// 鎵�鍦ㄧ渷浠絀d
+        /// 鎵�鍦ㄧ渷浠界紪鍙�
         /// </summary>
-        public Guid? ProvinceId { get; set; }
+        public string ProvinceCode { get; set; }
 
         /// <summary>
         /// 鎵�鍦ㄧ渷浠�
@@ -39,9 +42,9 @@
         public DictionaryData Province { get; set; }
 
         /// <summary>
-        /// 鎵�鍦ㄥ煄甯侷d
+        /// 鎵�鍦ㄥ煄甯傜紪鍙�
         /// </summary>
-        public Guid? CityId { get; set; }
+        public string CityCode { get; set; }
 
         /// <summary>
         /// 鎵�鍦ㄥ煄甯�
@@ -49,9 +52,9 @@
         public DictionaryData City { get; set; }
 
         /// <summary>
-        /// 鎵�灞炶涓欼d
+        /// 鎵�灞炶涓氱紪鍙�
         /// </summary>
-        public Guid? IndustryTypeId { get; set; }
+        public string IndustryTypeCode { get; set; }
 
         /// <summary>
         /// 鎵�灞炶涓�
@@ -145,5 +148,27 @@
         /// 鐢ㄦ埛淇℃伅
         /// </summary>
         public List<UserInfo> UserInfos { get; set; }
+
+        public void Configure(EntityTypeBuilder<Enterprise> entityBuilder, DbContext dbContext, Type dbContextLocator)
+        {
+            entityBuilder
+                .HasOne(it => it.Province)
+                .WithMany()
+                .HasForeignKey(it => it.ProvinceCode)
+                .HasPrincipalKey(it => it.Code)
+                .OnDelete(DeleteBehavior.Restrict);
+            entityBuilder
+                .HasOne(it => it.City)
+                .WithMany()
+                .HasForeignKey(it => it.CityCode)
+                .HasPrincipalKey(it => it.Code)
+                .OnDelete(DeleteBehavior.Restrict);
+            entityBuilder
+                .HasOne(it => it.IndustryType)
+                .WithMany()
+                .HasForeignKey(it => it.IndustryTypeCode)
+                .HasPrincipalKey(it => it.Code)
+                .OnDelete(DeleteBehavior.Restrict);
+        }
     }
 }
diff --git a/FlexJobApi.Core/Entities/Users/UserInfo.cs b/FlexJobApi.Core/Entities/Users/UserInfo.cs
index c2228a7..f13498f 100644
--- a/FlexJobApi.Core/Entities/Users/UserInfo.cs
+++ b/FlexJobApi.Core/Entities/Users/UserInfo.cs
@@ -1,5 +1,6 @@
 锘縰sing Furion.DatabaseAccessor;
 using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Metadata.Builders;
 using System;
 using System.Collections.Generic;
 using System.ComponentModel.DataAnnotations;
@@ -12,7 +13,7 @@
     /// <summary>
     /// 鐢ㄦ埛淇℃伅
     /// </summary>
-    public class UserInfo : CommonEntity, IEntitySeedData<UserInfo>
+    public class UserInfo : CommonEntity, IEntitySeedData<UserInfo>, IEntityTypeBuilder<UserInfo>
     {
         public UserInfo()
         {
@@ -74,9 +75,9 @@
         public List<UserInfoDepartment> UserInfoDepartments { get; set; }
 
         /// <summary>
-        /// 韬唤Id
+        /// 韬唤缂栧彿
         /// </summary>
-        public Guid? PersonalIdentityId { get; set; }
+        public string PersonalIdentityCode { get; set; }
 
         /// <summary>
         /// 韬唤
@@ -84,9 +85,9 @@
         public DictionaryData PersonalIdentity { get; set; }
 
         /// <summary>
-        /// 瀛﹀巻Id
+        /// 瀛﹀巻缂栧彿
         /// </summary>
-        public Guid? EducationalBackgroundId { get; set; }
+        public string EducationalBackgroundCode { get; set; }
 
         /// <summary>
         /// 瀛﹀巻
@@ -94,9 +95,9 @@
         public DictionaryData EducationalBackground { get; set; }
 
         /// <summary>
-        /// 甯搁┗鐪佷唤Id
+        /// 甯搁┗鐪佷唤缂栧彿
         /// </summary>
-        public Guid? ProvinceId { get; set; }
+        public string ProvinceCode { get; set; }
 
         /// <summary>
         /// 甯搁┗鐪佷唤
@@ -104,9 +105,9 @@
         public DictionaryData Province { get; set; }
 
         /// <summary>
-        /// 甯搁┗鍩庡競Id
+        /// 甯搁┗鍩庡競缂栧彿
         /// </summary>
-        public Guid? CityId { get; set; }
+        public string CityCode { get; set; }
 
         /// <summary>
         /// 甯搁┗鍩庡競
@@ -163,6 +164,34 @@
         /// </summary>
         public EnumUserInfoStatus Status { get; set; }
 
+        public void Configure(EntityTypeBuilder<UserInfo> entityBuilder, DbContext dbContext, Type dbContextLocator)
+        {
+            entityBuilder
+                .HasOne(it => it.PersonalIdentity)
+                .WithMany()
+                .HasForeignKey(it => it.PersonalIdentityCode)
+                .HasPrincipalKey(it => it.Code)
+                .OnDelete(DeleteBehavior.Restrict);
+            entityBuilder
+                .HasOne(it => it.EducationalBackground)
+                .WithMany()
+                .HasForeignKey(it => it.EducationalBackgroundCode)
+                .HasPrincipalKey(it => it.Code)
+                .OnDelete(DeleteBehavior.Restrict);
+            entityBuilder
+                .HasOne(it => it.Province)
+                .WithMany()
+                .HasForeignKey(it => it.ProvinceCode)
+                .HasPrincipalKey(it => it.Code)
+                .OnDelete(DeleteBehavior.Restrict);
+            entityBuilder
+                .HasOne(it => it.City)
+                .WithMany()
+                .HasForeignKey(it => it.CityCode)
+                .HasPrincipalKey(it => it.Code)
+                .OnDelete(DeleteBehavior.Restrict);
+        }
+
         public IEnumerable<UserInfo> HasData(DbContext dbContext, Type dbContextLocator)
         {
             return new List<UserInfo>
diff --git a/FlexJobApi.Core/Entities/Users/UserInfoCredential.cs b/FlexJobApi.Core/Entities/Users/UserInfoCredential.cs
index cda1e12..f63c53a 100644
--- a/FlexJobApi.Core/Entities/Users/UserInfoCredential.cs
+++ b/FlexJobApi.Core/Entities/Users/UserInfoCredential.cs
@@ -1,4 +1,7 @@
-锘縰sing System;
+锘縰sing Furion.DatabaseAccessor;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Metadata.Builders;
+using System;
 using System.Collections.Generic;
 using System.ComponentModel.DataAnnotations;
 using System.Linq;
@@ -10,7 +13,7 @@
     /// <summary>
     /// 鐢ㄦ埛淇℃伅璧勬牸璇佷功
     /// </summary>
-    public class UserInfoCredential : CommonEntity
+    public class UserInfoCredential : CommonEntity, IEntityTypeBuilder<UserInfoCredential>
     {
         /// <summary>
         /// 鐢ㄦ埛淇℃伅Id
@@ -23,9 +26,10 @@
         public UserInfo UserInfo { get; set; }
 
         /// <summary>
-        /// 璇佷功绫诲瀷Id
+        /// 璇佷功绫诲瀷缂栧彿
         /// </summary>
-        public Guid? TypeId { get; set; }
+        [Required]
+        public string TypeCode { get; set; }
 
         /// <summary>
         /// 璇佷功绫诲瀷
@@ -69,5 +73,15 @@
         /// </summary>
         public string BackImg { get; set; }
 
+        public void Configure(EntityTypeBuilder<UserInfoCredential> entityBuilder, DbContext dbContext, Type dbContextLocator)
+        {
+            entityBuilder
+                .HasOne(it => it.Type)
+                .WithMany()
+                .HasForeignKey(it => it.TypeCode)
+                .HasPrincipalKey(it => it.Code)
+                .IsRequired()
+                .OnDelete(DeleteBehavior.Restrict);
+        }
     }
 }
diff --git a/FlexJobApi.Core/Entities/Users/UserInfoExpectJob.cs b/FlexJobApi.Core/Entities/Users/UserInfoExpectJob.cs
index 60b21b8..7bd8840 100644
--- a/FlexJobApi.Core/Entities/Users/UserInfoExpectJob.cs
+++ b/FlexJobApi.Core/Entities/Users/UserInfoExpectJob.cs
@@ -1,4 +1,7 @@
-锘縰sing System;
+锘縰sing Furion.DatabaseAccessor;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Metadata.Builders;
+using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
@@ -9,7 +12,7 @@
     /// <summary>
     /// 鐢ㄦ埛淇℃伅鏈熸湜宀椾綅
     /// </summary>
-    public class UserInfoExpectJob : CommonEntity
+    public class UserInfoExpectJob : CommonEntity, IEntityTypeBuilder<UserInfoExpectJob>
     {
         /// <summary>
         /// 鐢ㄦ埛淇℃伅Id
@@ -22,13 +25,24 @@
         public UserInfo UserInfo { get; set; }
 
         /// <summary>
-        /// 鏈熸湜宀椾綅Id
+        /// 鏈熸湜宀椾綅缂栧彿
         /// </summary>
-        public Guid PersonalIdentityId { get; set; }
+        public string PersonalIdentityCode { get; set; }
 
         /// <summary>
         /// 鏈熸湜宀椾綅
         /// </summary>
         public DictionaryData PersonalIdentity { get; set; }
+
+        public void Configure(EntityTypeBuilder<UserInfoExpectJob> entityBuilder, DbContext dbContext, Type dbContextLocator)
+        {
+            entityBuilder
+                .HasOne(it => it.PersonalIdentity)
+                .WithMany()
+                .HasForeignKey(it => it.PersonalIdentityCode)
+                .HasPrincipalKey(it => it.Code)
+                .IsRequired()
+                .OnDelete(DeleteBehavior.Restrict);
+        }
     }
 }
diff --git a/FlexJobApi.Core/FlexJobApi.Core.xml b/FlexJobApi.Core/FlexJobApi.Core.xml
index ba3a216..1bb9277 100644
--- a/FlexJobApi.Core/FlexJobApi.Core.xml
+++ b/FlexJobApi.Core/FlexJobApi.Core.xml
@@ -534,14 +534,24 @@
             璧勬牸璇佷功
             </summary>
         </member>
-        <member name="P:FlexJobApi.Core.TaskInfo.CityId">
+        <member name="P:FlexJobApi.Core.TaskInfo.ProvinceCode">
             <summary>
-            浠诲姟鍦扮偣鎵�灞炲尯鍩烮d
+            浠诲姟鍦扮偣鎵�灞炵渷浠界紪鍙�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.TaskInfo.Province">
+            <summary>
+            浠诲姟鍦扮偣鎵�灞炵渷浠�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.TaskInfo.CityCode">
+            <summary>
+            浠诲姟鍦扮偣鎵�灞炲煄甯傜紪鍙�
             </summary>
         </member>
         <member name="P:FlexJobApi.Core.TaskInfo.City">
             <summary>
-            浠诲姟鍦扮偣鎵�灞炲尯鍩�
+            浠诲姟鍦扮偣鎵�灞炲煄甯�
             </summary>
         </member>
         <member name="P:FlexJobApi.Core.TaskInfo.Address">
@@ -574,9 +584,9 @@
             浠诲姟
             </summary>
         </member>
-        <member name="P:FlexJobApi.Core.TaskInfoBenefit.BenefitId">
+        <member name="P:FlexJobApi.Core.TaskInfoBenefit.BenefitCode">
             <summary>
-            绂忓埄Id
+            绂忓埄缂栧彿
             </summary>
         </member>
         <member name="P:FlexJobApi.Core.TaskInfoBenefit.Benefit">
@@ -594,9 +604,9 @@
             浠诲姟
             </summary>
         </member>
-        <member name="P:FlexJobApi.Core.TaskInfoCredentialLimit.TypeId">
+        <member name="P:FlexJobApi.Core.TaskInfoCredentialLimit.TypeCode">
             <summary>
-            璇佷功绫诲瀷Id
+            璇佷功绫诲瀷缂栧彿
             </summary>
         </member>
         <member name="P:FlexJobApi.Core.TaskInfoCredentialLimit.Type">
@@ -714,9 +724,9 @@
             浼佷笟璁よ瘉
             </summary>
         </member>
-        <member name="P:FlexJobApi.Core.Enterprise.ProvinceId">
+        <member name="P:FlexJobApi.Core.Enterprise.ProvinceCode">
             <summary>
-            鎵�鍦ㄧ渷浠絀d
+            鎵�鍦ㄧ渷浠界紪鍙�
             </summary>
         </member>
         <member name="P:FlexJobApi.Core.Enterprise.Province">
@@ -724,9 +734,9 @@
             鎵�鍦ㄧ渷浠�
             </summary>
         </member>
-        <member name="P:FlexJobApi.Core.Enterprise.CityId">
+        <member name="P:FlexJobApi.Core.Enterprise.CityCode">
             <summary>
-            鎵�鍦ㄥ煄甯侷d
+            鎵�鍦ㄥ煄甯傜紪鍙�
             </summary>
         </member>
         <member name="P:FlexJobApi.Core.Enterprise.City">
@@ -734,9 +744,9 @@
             鎵�鍦ㄥ煄甯�
             </summary>
         </member>
-        <member name="P:FlexJobApi.Core.Enterprise.IndustryTypeId">
+        <member name="P:FlexJobApi.Core.Enterprise.IndustryTypeCode">
             <summary>
-            鎵�灞炶涓欼d
+            鎵�灞炶涓氱紪鍙�
             </summary>
         </member>
         <member name="P:FlexJobApi.Core.Enterprise.IndustryType">
@@ -1249,9 +1259,9 @@
             鐢ㄦ埛淇℃伅閮ㄩ棬
             </summary>
         </member>
-        <member name="P:FlexJobApi.Core.UserInfo.PersonalIdentityId">
+        <member name="P:FlexJobApi.Core.UserInfo.PersonalIdentityCode">
             <summary>
-            韬唤Id
+            韬唤缂栧彿
             </summary>
         </member>
         <member name="P:FlexJobApi.Core.UserInfo.PersonalIdentity">
@@ -1259,9 +1269,9 @@
             韬唤
             </summary>
         </member>
-        <member name="P:FlexJobApi.Core.UserInfo.EducationalBackgroundId">
+        <member name="P:FlexJobApi.Core.UserInfo.EducationalBackgroundCode">
             <summary>
-            瀛﹀巻Id
+            瀛﹀巻缂栧彿
             </summary>
         </member>
         <member name="P:FlexJobApi.Core.UserInfo.EducationalBackground">
@@ -1269,9 +1279,9 @@
             瀛﹀巻
             </summary>
         </member>
-        <member name="P:FlexJobApi.Core.UserInfo.ProvinceId">
+        <member name="P:FlexJobApi.Core.UserInfo.ProvinceCode">
             <summary>
-            甯搁┗鐪佷唤Id
+            甯搁┗鐪佷唤缂栧彿
             </summary>
         </member>
         <member name="P:FlexJobApi.Core.UserInfo.Province">
@@ -1279,9 +1289,9 @@
             甯搁┗鐪佷唤
             </summary>
         </member>
-        <member name="P:FlexJobApi.Core.UserInfo.CityId">
+        <member name="P:FlexJobApi.Core.UserInfo.CityCode">
             <summary>
-            甯搁┗鍩庡競Id
+            甯搁┗鍩庡競缂栧彿
             </summary>
         </member>
         <member name="P:FlexJobApi.Core.UserInfo.City">
@@ -1384,9 +1394,9 @@
             鐢ㄦ埛淇℃伅
             </summary>
         </member>
-        <member name="P:FlexJobApi.Core.UserInfoCredential.TypeId">
+        <member name="P:FlexJobApi.Core.UserInfoCredential.TypeCode">
             <summary>
-            璇佷功绫诲瀷Id
+            璇佷功绫诲瀷缂栧彿
             </summary>
         </member>
         <member name="P:FlexJobApi.Core.UserInfoCredential.Type">
@@ -1469,9 +1479,9 @@
             鐢ㄦ埛淇℃伅
             </summary>
         </member>
-        <member name="P:FlexJobApi.Core.UserInfoExpectJob.PersonalIdentityId">
+        <member name="P:FlexJobApi.Core.UserInfoExpectJob.PersonalIdentityCode">
             <summary>
-            鏈熸湜宀椾綅Id
+            鏈熸湜宀椾綅缂栧彿
             </summary>
         </member>
         <member name="P:FlexJobApi.Core.UserInfoExpectJob.PersonalIdentity">
@@ -2217,7 +2227,12 @@
         </member>
         <member name="P:FlexJobApi.Core.SaveDictionaryDataCommand.CategoryId">
             <summary>
-            绫诲埆Id
+            绫诲埆Id锛圛d/缂栧彿浜岄�変竴锛�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.SaveDictionaryDataCommand.CategoryCode">
+            <summary>
+            绫诲埆缂栧彿锛圛d/缂栧彿浜岄�変竴锛�
             </summary>
         </member>
         <member name="P:FlexJobApi.Core.SaveDictionaryDataCommand.ParentId">
diff --git a/FlexJobApi.Core/Models/Main/Dictionaries/Commands/SaveDictionaryDataCommand.cs b/FlexJobApi.Core/Models/Main/Dictionaries/Commands/SaveDictionaryDataCommand.cs
index 759dcfe..1cb7540 100644
--- a/FlexJobApi.Core/Models/Main/Dictionaries/Commands/SaveDictionaryDataCommand.cs
+++ b/FlexJobApi.Core/Models/Main/Dictionaries/Commands/SaveDictionaryDataCommand.cs
@@ -15,9 +15,14 @@
     public class SaveDictionaryDataCommand : SaveDataCommand
     {
         /// <summary>
-        /// 绫诲埆Id
+        /// 绫诲埆Id锛圛d/缂栧彿浜岄�変竴锛�
         /// </summary>
-        public Guid CategoryId { get; set; }
+        public Guid? CategoryId { get; set; }
+
+        /// <summary>
+        /// 绫诲埆缂栧彿锛圛d/缂栧彿浜岄�変竴锛�
+        /// </summary>
+        public string CategoryCode { get; set; }
 
         /// <summary>
         /// 涓婄骇Id
@@ -28,6 +33,7 @@
         /// 缂栧彿
         /// </summary>
         [MaxLength(128)]
+        [Required]
         public string Code { get; set; }
 
         /// <summary>
diff --git a/FlexJobApi.Database.Migrations/Migrations/20250807051431_UpdateDictionaryData.Designer.cs b/FlexJobApi.Database.Migrations/Migrations/20250807051431_UpdateDictionaryData.Designer.cs
new file mode 100644
index 0000000..d43bef4
--- /dev/null
+++ b/FlexJobApi.Database.Migrations/Migrations/20250807051431_UpdateDictionaryData.Designer.cs
@@ -0,0 +1,1832 @@
+锘�// <auto-generated />
+using System;
+using FlexJobApi.EntityFramework.Core;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Metadata;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+
+#nullable disable
+
+namespace FlexJobApi.Database.Migrations.Migrations
+{
+    [DbContext(typeof(DefaultDbContext))]
+    [Migration("20250807051431_UpdateDictionaryData")]
+    partial class UpdateDictionaryData
+    {
+        /// <inheritdoc />
+        protected override void BuildTargetModel(ModelBuilder modelBuilder)
+        {
+#pragma warning disable 612, 618
+            modelBuilder
+                .HasAnnotation("ProductVersion", "9.0.7")
+                .HasAnnotation("Relational:MaxIdentifierLength", 128);
+
+            SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
+
+            modelBuilder.Entity("FlexJobApi.Core.Department", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserInfoId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid>("EnterpriseId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<bool>("IsDisabled")
+                        .HasColumnType("bit");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<Guid?>("ParentId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("Path")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("Remark")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserInfoId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("EnterpriseId");
+
+                    b.HasIndex("ParentId");
+
+                    b.ToTable("Department");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.DictionaryCategory", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("Code")
+                        .IsRequired()
+                        .HasMaxLength(128)
+                        .HasColumnType("nvarchar(128)");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserInfoId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("FieldNames")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasMaxLength(128)
+                        .HasColumnType("nvarchar(128)");
+
+                    b.Property<string>("Remark")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserInfoId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("DictionaryCategory");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.DictionaryData", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid>("CategoryId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("Code")
+                        .IsRequired()
+                        .HasMaxLength(128)
+                        .HasColumnType("nvarchar(128)");
+
+                    b.Property<string>("Content")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserInfoId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("Field1")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("Field2")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("Field3")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("Field4")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("Field5")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<bool>("IsDisabled")
+                        .HasColumnType("bit");
+
+                    b.Property<Guid?>("ParentId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("Path")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserInfoId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("CategoryId");
+
+                    b.HasIndex("Code")
+                        .IsUnique();
+
+                    b.HasIndex("ParentId");
+
+                    b.ToTable("DictionaryData");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.Enterprise", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("BankBranchName")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("BankCard")
+                        .HasMaxLength(32)
+                        .HasColumnType("nvarchar(32)");
+
+                    b.Property<string>("BankName")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("CityCode")
+                        .HasColumnType("nvarchar(128)");
+
+                    b.Property<string>("ContactEmail")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ContactPhoneNumber")
+                        .HasMaxLength(11)
+                        .HasColumnType("nvarchar(11)");
+
+                    b.Property<string>("Contacts")
+                        .HasMaxLength(32)
+                        .HasColumnType("nvarchar(32)");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserInfoId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid>("EnterpriseAuthId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("IndustryTypeCode")
+                        .HasColumnType("nvarchar(128)");
+
+                    b.Property<bool>("IsCheckedBankCard")
+                        .HasColumnType("bit");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<string>("MainBusiness")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<decimal?>("MergeSignCost")
+                        .HasColumnType("decimal(18,2)");
+
+                    b.Property<int?>("PayAccess")
+                        .HasColumnType("int");
+
+                    b.Property<string>("ProvinceCode")
+                        .HasColumnType("nvarchar(128)");
+
+                    b.Property<int?>("RealAccess")
+                        .HasColumnType("int");
+
+                    b.Property<decimal?>("RealVerifyCost")
+                        .HasColumnType("decimal(18,2)");
+
+                    b.Property<decimal?>("SignCost")
+                        .HasColumnType("decimal(18,2)");
+
+                    b.Property<int?>("SmsAccess")
+                        .HasColumnType("int");
+
+                    b.Property<decimal>("SmsCost")
+                        .HasColumnType("decimal(18,2)");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserInfoId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("CityCode");
+
+                    b.HasIndex("EnterpriseAuthId");
+
+                    b.HasIndex("IndustryTypeCode");
+
+                    b.HasIndex("ProvinceCode");
+
+                    b.ToTable("Enterprise");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.EnterpriseAuth", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("BankCard")
+                        .HasMaxLength(32)
+                        .HasColumnType("nvarchar(32)");
+
+                    b.Property<string>("BankCardImg")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserInfoId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("EnterpriseName")
+                        .IsRequired()
+                        .HasMaxLength(128)
+                        .HasColumnType("nvarchar(128)");
+
+                    b.Property<int?>("EnterpriseRealMethod")
+                        .HasColumnType("int");
+
+                    b.Property<string>("Identity")
+                        .HasMaxLength(18)
+                        .HasColumnType("nvarchar(18)");
+
+                    b.Property<string>("IdentityBackImg")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("IdentityImg")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<bool>("IsReal")
+                        .HasColumnType("bit");
+
+                    b.Property<string>("LegalIdentity")
+                        .HasMaxLength(18)
+                        .HasColumnType("nvarchar(18)");
+
+                    b.Property<string>("LegalPerson")
+                        .HasMaxLength(32)
+                        .HasColumnType("nvarchar(32)");
+
+                    b.Property<string>("LicenseImage")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("Name")
+                        .HasMaxLength(32)
+                        .HasColumnType("nvarchar(32)");
+
+                    b.Property<int?>("PersonalRealMethod")
+                        .HasColumnType("int");
+
+                    b.Property<string>("PhoneNumber")
+                        .HasMaxLength(11)
+                        .HasColumnType("nvarchar(11)");
+
+                    b.Property<bool?>("Proxy")
+                        .HasColumnType("bit");
+
+                    b.Property<string>("ProxyPowerAttorneyUrl")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("SocietyCreditCode")
+                        .IsRequired()
+                        .HasMaxLength(18)
+                        .HasColumnType("nvarchar(18)");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserInfoId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("EnterpriseAuth");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.Menu", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<int>("ClientType")
+                        .HasColumnType("int");
+
+                    b.Property<string>("Code")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserInfoId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("Group")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("Icon")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<bool>("IsCache")
+                        .HasColumnType("bit");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<bool>("IsDisabled")
+                        .HasColumnType("bit");
+
+                    b.Property<string>("Location")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasMaxLength(128)
+                        .HasColumnType("nvarchar(128)");
+
+                    b.Property<Guid?>("ParentId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("Path")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("Remark")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<int>("Type")
+                        .HasColumnType("int");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserInfoId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("Url")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<int>("UserType")
+                        .HasColumnType("int");
+
+                    b.Property<int>("VisitLevel")
+                        .HasColumnType("int");
+
+                    b.Property<string>("Width")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("ParentId");
+
+                    b.ToTable("Menu");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.Resource", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("ActionName")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ActionSummary")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<bool>("AllowAnonymous")
+                        .HasColumnType("bit");
+
+                    b.Property<string>("ApplicationName")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("Code")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<int>("Controller")
+                        .HasColumnType("int");
+
+                    b.Property<string>("ControllerSummary")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserInfoId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("DynamicAssemblyName")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<bool>("IsExpired")
+                        .HasColumnType("bit");
+
+                    b.Property<int>("Method")
+                        .HasColumnType("int");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("RequestTypeFullName")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("RequestTypeName")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ResponseTypeFullName")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ResponseTypeName")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("Route")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("RouteArea")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<int>("Service")
+                        .HasColumnType("int");
+
+                    b.Property<string>("ServiceName")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserInfoId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("Resource");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.Role", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<int>("ClientType")
+                        .HasColumnType("int");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserInfoId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<int>("DataPower")
+                        .HasColumnType("int");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<bool>("IsDisabled")
+                        .HasColumnType("bit");
+
+                    b.Property<int>("MinLevel")
+                        .HasColumnType("int");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasMaxLength(128)
+                        .HasColumnType("nvarchar(128)");
+
+                    b.Property<string>("Remark")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserInfoId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<int>("UserType")
+                        .HasColumnType("int");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("Role");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.RoleMenu", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserInfoId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<Guid>("MenuId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid>("RoleId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserInfoId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("MenuId");
+
+                    b.HasIndex("RoleId");
+
+                    b.ToTable("RoleMenu");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.RoleResource", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserInfoId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<int>("DataPower")
+                        .HasColumnType("int");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<Guid>("ResourceId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid>("RoleId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserInfoId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("ResourceId");
+
+                    b.HasIndex("RoleId");
+
+                    b.ToTable("RoleResource");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.TaskInfo", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("Address")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<int>("AgeMaxLimit")
+                        .HasColumnType("int");
+
+                    b.Property<int>("AgeMinLimit")
+                        .HasColumnType("int");
+
+                    b.Property<DateTime>("BeginTime")
+                        .HasColumnType("datetime2");
+
+                    b.Property<int>("BillingMethod")
+                        .HasColumnType("int");
+
+                    b.Property<string>("CityCode")
+                        .HasColumnType("nvarchar(128)");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserInfoId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTime>("EndTime")
+                        .HasColumnType("datetime2");
+
+                    b.Property<Guid>("EnterpriseId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<int>("GenderLimit")
+                        .HasColumnType("int");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ProvinceCode")
+                        .HasColumnType("nvarchar(128)");
+
+                    b.Property<decimal>("ServiceFee")
+                        .HasColumnType("decimal(18,2)");
+
+                    b.Property<int>("SettlementCycle")
+                        .HasColumnType("int");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserInfoId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("CityCode");
+
+                    b.HasIndex("EnterpriseId");
+
+                    b.HasIndex("ProvinceCode");
+
+                    b.ToTable("TaskInfo");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.TaskInfoBenefit", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("BenefitCode")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(128)");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserInfoId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<Guid>("TaskInfoId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserInfoId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("BenefitCode");
+
+                    b.HasIndex("TaskInfoId");
+
+                    b.ToTable("TaskInfoBenefit");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.TaskInfoCredentialLimit", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserInfoId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<Guid>("TaskInfoId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("TypeCode")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(128)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserInfoId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("TaskInfoId");
+
+                    b.HasIndex("TypeCode");
+
+                    b.ToTable("TaskInfoCredentialLimit");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.TaskInfoUser", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserInfoId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<int>("HireStatus")
+                        .HasColumnType("int");
+
+                    b.Property<DateTime?>("HireTime")
+                        .HasColumnType("datetime2");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<int?>("SignContractStatus")
+                        .HasColumnType("int");
+
+                    b.Property<DateTime?>("SignContractTime")
+                        .HasColumnType("datetime2");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<Guid>("TaskInfoId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserInfoId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid>("UserInfoId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("TaskInfoId");
+
+                    b.HasIndex("UserInfoId");
+
+                    b.ToTable("TaskInfoUser");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.UserAuth", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("BankCard")
+                        .HasMaxLength(32)
+                        .HasColumnType("nvarchar(32)");
+
+                    b.Property<string>("BankCardImg")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserInfoId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("Identity")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("IdentityBackImg")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("IdentityImg")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<bool>("IsCheckPhoneNumber")
+                        .HasColumnType("bit");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<bool>("IsReal")
+                        .HasColumnType("bit");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasMaxLength(32)
+                        .HasColumnType("nvarchar(32)");
+
+                    b.Property<string>("Password")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("PhoneNumber")
+                        .HasMaxLength(11)
+                        .HasColumnType("nvarchar(11)");
+
+                    b.Property<int?>("RealAccess")
+                        .HasColumnType("int");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserInfoId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("UserName")
+                        .IsRequired()
+                        .HasMaxLength(32)
+                        .HasColumnType("nvarchar(32)");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("UserAuth");
+
+                    b.HasData(
+                        new
+                        {
+                            Id = new Guid("11111111-1111-1111-1111-111111111111"),
+                            CreatedTime = new DateTimeOffset(new DateTime(2000, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 8, 0, 0, 0)),
+                            IsCheckPhoneNumber = false,
+                            IsDeleted = false,
+                            IsReal = false,
+                            Name = "绠$悊鍛�",
+                            Password = "iEYggKrMhQ3ASUGLobra1w==:fn/DsMJUbD9FGpvBvR3moMpMPptdxzZlourPVhU479I=",
+                            Sort = 0,
+                            UserName = "system"
+                        });
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.UserInfo", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("Avatar")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("CityCode")
+                        .HasColumnType("nvarchar(128)");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserInfoId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("EducationalBackgroundCode")
+                        .HasColumnType("nvarchar(128)");
+
+                    b.Property<Guid?>("EnterpriseId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<int?>("FreeTime")
+                        .HasColumnType("int");
+
+                    b.Property<int?>("Height")
+                        .HasColumnType("int");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<int?>("JobSeekingStatus")
+                        .HasColumnType("int");
+
+                    b.Property<int>("Level")
+                        .HasColumnType("int");
+
+                    b.Property<string>("PersonalIdentityCode")
+                        .HasColumnType("nvarchar(128)");
+
+                    b.Property<string>("ProvinceCode")
+                        .HasColumnType("nvarchar(128)");
+
+                    b.Property<string>("Remark")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<int>("Status")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<int>("Type")
+                        .HasColumnType("int");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserInfoId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid>("UserAuthId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<int?>("Weight")
+                        .HasColumnType("int");
+
+                    b.Property<string>("WorkExperience")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("WorkSeniority")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("WxmpOpenId")
+                        .HasMaxLength(32)
+                        .HasColumnType("nvarchar(32)");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("CityCode");
+
+                    b.HasIndex("EducationalBackgroundCode");
+
+                    b.HasIndex("EnterpriseId");
+
+                    b.HasIndex("PersonalIdentityCode");
+
+                    b.HasIndex("ProvinceCode");
+
+                    b.HasIndex("UserAuthId");
+
+                    b.ToTable("UserInfo");
+
+                    b.HasData(
+                        new
+                        {
+                            Id = new Guid("11111111-1111-1111-1111-111111111112"),
+                            CreatedTime = new DateTimeOffset(new DateTime(2000, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 8, 0, 0, 0)),
+                            IsDeleted = false,
+                            Level = 999,
+                            Sort = 0,
+                            Status = 0,
+                            Type = 100,
+                            UserAuthId = new Guid("11111111-1111-1111-1111-111111111111")
+                        });
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.UserInfoBankCard", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("Bank")
+                        .IsRequired()
+                        .HasMaxLength(128)
+                        .HasColumnType("nvarchar(128)");
+
+                    b.Property<string>("Code")
+                        .IsRequired()
+                        .HasMaxLength(32)
+                        .HasColumnType("nvarchar(32)");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserInfoId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<string>("PhoneNumber")
+                        .IsRequired()
+                        .HasMaxLength(11)
+                        .HasColumnType("nvarchar(11)");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserInfoId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid>("UserInfoId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("UserInfoId");
+
+                    b.ToTable("UserInfoBankCard");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.UserInfoCredential", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("BackImg")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("Code")
+                        .IsRequired()
+                        .HasMaxLength(128)
+                        .HasColumnType("nvarchar(128)");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserInfoId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTime>("EndDate")
+                        .HasColumnType("datetime2");
+
+                    b.Property<string>("Img")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<bool>("IsForever")
+                        .HasColumnType("bit");
+
+                    b.Property<string>("IssueUnit")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<DateTime>("StartDate")
+                        .HasColumnType("datetime2");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("TypeCode")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(128)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserInfoId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid>("UserInfoId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("TypeCode");
+
+                    b.HasIndex("UserInfoId");
+
+                    b.ToTable("UserInfoCredential");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.UserInfoDepartment", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserInfoId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid>("DepartmentId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserInfoId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid>("UserInfoId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("DepartmentId");
+
+                    b.HasIndex("UserInfoId");
+
+                    b.ToTable("UserInfoDepartment");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.UserInfoExpectJob", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserInfoId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<string>("PersonalIdentityCode")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(128)");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserInfoId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid>("UserInfoId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("PersonalIdentityCode");
+
+                    b.HasIndex("UserInfoId");
+
+                    b.ToTable("UserInfoExpectJob");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.UserInfoPhoto", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserInfoId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("Img")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserInfoId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid>("UserInfoId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("UserInfoId");
+
+                    b.ToTable("UserInfoPhoto");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.UserInfoRole", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserInfoId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<Guid>("RoleId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserInfoId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid>("UserInfoId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("RoleId");
+
+                    b.HasIndex("UserInfoId");
+
+                    b.ToTable("UserInfoRole");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.Department", b =>
+                {
+                    b.HasOne("FlexJobApi.Core.Enterprise", "Enterprise")
+                        .WithMany("Departments")
+                        .HasForeignKey("EnterpriseId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.HasOne("FlexJobApi.Core.Department", "Parent")
+                        .WithMany("Children")
+                        .HasForeignKey("ParentId");
+
+                    b.Navigation("Enterprise");
+
+                    b.Navigation("Parent");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.DictionaryData", b =>
+                {
+                    b.HasOne("FlexJobApi.Core.DictionaryCategory", "Category")
+                        .WithMany()
+                        .HasForeignKey("CategoryId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.HasOne("FlexJobApi.Core.DictionaryData", "Parent")
+                        .WithMany("Children")
+                        .HasForeignKey("ParentId");
+
+                    b.Navigation("Category");
+
+                    b.Navigation("Parent");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.Enterprise", b =>
+                {
+                    b.HasOne("FlexJobApi.Core.DictionaryData", "City")
+                        .WithMany()
+                        .HasForeignKey("CityCode")
+                        .HasPrincipalKey("Code")
+                        .OnDelete(DeleteBehavior.Restrict);
+
+                    b.HasOne("FlexJobApi.Core.EnterpriseAuth", "EnterpriseAuth")
+                        .WithMany()
+                        .HasForeignKey("EnterpriseAuthId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.HasOne("FlexJobApi.Core.DictionaryData", "IndustryType")
+                        .WithMany()
+                        .HasForeignKey("IndustryTypeCode")
+                        .HasPrincipalKey("Code")
+                        .OnDelete(DeleteBehavior.Restrict);
+
+                    b.HasOne("FlexJobApi.Core.DictionaryData", "Province")
+                        .WithMany()
+                        .HasForeignKey("ProvinceCode")
+                        .HasPrincipalKey("Code")
+                        .OnDelete(DeleteBehavior.Restrict);
+
+                    b.Navigation("City");
+
+                    b.Navigation("EnterpriseAuth");
+
+                    b.Navigation("IndustryType");
+
+                    b.Navigation("Province");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.Menu", b =>
+                {
+                    b.HasOne("FlexJobApi.Core.Menu", "Parent")
+                        .WithMany("Children")
+                        .HasForeignKey("ParentId");
+
+                    b.Navigation("Parent");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.RoleMenu", b =>
+                {
+                    b.HasOne("FlexJobApi.Core.Menu", "Menu")
+                        .WithMany()
+                        .HasForeignKey("MenuId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.HasOne("FlexJobApi.Core.Role", "Role")
+                        .WithMany("RoleMenus")
+                        .HasForeignKey("RoleId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("Menu");
+
+                    b.Navigation("Role");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.RoleResource", b =>
+                {
+                    b.HasOne("FlexJobApi.Core.Resource", "Resource")
+                        .WithMany()
+                        .HasForeignKey("ResourceId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.HasOne("FlexJobApi.Core.Role", "Role")
+                        .WithMany("RoleResources")
+                        .HasForeignKey("RoleId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("Resource");
+
+                    b.Navigation("Role");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.TaskInfo", b =>
+                {
+                    b.HasOne("FlexJobApi.Core.DictionaryData", "City")
+                        .WithMany()
+                        .HasForeignKey("CityCode")
+                        .HasPrincipalKey("Code")
+                        .OnDelete(DeleteBehavior.Restrict);
+
+                    b.HasOne("FlexJobApi.Core.Enterprise", "Enterprise")
+                        .WithMany()
+                        .HasForeignKey("EnterpriseId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.HasOne("FlexJobApi.Core.DictionaryData", "Province")
+                        .WithMany()
+                        .HasForeignKey("ProvinceCode")
+                        .HasPrincipalKey("Code")
+                        .OnDelete(DeleteBehavior.Restrict);
+
+                    b.Navigation("City");
+
+                    b.Navigation("Enterprise");
+
+                    b.Navigation("Province");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.TaskInfoBenefit", b =>
+                {
+                    b.HasOne("FlexJobApi.Core.DictionaryData", "Benefit")
+                        .WithMany()
+                        .HasForeignKey("BenefitCode")
+                        .HasPrincipalKey("Code")
+                        .OnDelete(DeleteBehavior.Restrict)
+                        .IsRequired();
+
+                    b.HasOne("FlexJobApi.Core.TaskInfo", "TaskInfo")
+                        .WithMany("Benefits")
+                        .HasForeignKey("TaskInfoId")
+                        .OnDelete(DeleteBehavior.Restrict)
+                        .IsRequired();
+
+                    b.Navigation("Benefit");
+
+                    b.Navigation("TaskInfo");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.TaskInfoCredentialLimit", b =>
+                {
+                    b.HasOne("FlexJobApi.Core.TaskInfo", "TaskInfo")
+                        .WithMany("CredentialLimits")
+                        .HasForeignKey("TaskInfoId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.HasOne("FlexJobApi.Core.DictionaryData", "Type")
+                        .WithMany()
+                        .HasForeignKey("TypeCode")
+                        .HasPrincipalKey("Code")
+                        .OnDelete(DeleteBehavior.Restrict)
+                        .IsRequired();
+
+                    b.Navigation("TaskInfo");
+
+                    b.Navigation("Type");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.TaskInfoUser", b =>
+                {
+                    b.HasOne("FlexJobApi.Core.TaskInfo", "TaskInfo")
+                        .WithMany()
+                        .HasForeignKey("TaskInfoId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.HasOne("FlexJobApi.Core.UserInfo", "UserInfo")
+                        .WithMany()
+                        .HasForeignKey("UserInfoId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("TaskInfo");
+
+                    b.Navigation("UserInfo");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.UserInfo", b =>
+                {
+                    b.HasOne("FlexJobApi.Core.DictionaryData", "City")
+                        .WithMany()
+                        .HasForeignKey("CityCode")
+                        .HasPrincipalKey("Code")
+                        .OnDelete(DeleteBehavior.Restrict);
+
+                    b.HasOne("FlexJobApi.Core.DictionaryData", "EducationalBackground")
+                        .WithMany()
+                        .HasForeignKey("EducationalBackgroundCode")
+                        .HasPrincipalKey("Code")
+                        .OnDelete(DeleteBehavior.Restrict);
+
+                    b.HasOne("FlexJobApi.Core.Enterprise", "Enterprise")
+                        .WithMany("UserInfos")
+                        .HasForeignKey("EnterpriseId");
+
+                    b.HasOne("FlexJobApi.Core.DictionaryData", "PersonalIdentity")
+                        .WithMany()
+                        .HasForeignKey("PersonalIdentityCode")
+                        .HasPrincipalKey("Code")
+                        .OnDelete(DeleteBehavior.Restrict);
+
+                    b.HasOne("FlexJobApi.Core.DictionaryData", "Province")
+                        .WithMany()
+                        .HasForeignKey("ProvinceCode")
+                        .HasPrincipalKey("Code")
+                        .OnDelete(DeleteBehavior.Restrict);
+
+                    b.HasOne("FlexJobApi.Core.UserAuth", "UserAuth")
+                        .WithMany("UserInfos")
+                        .HasForeignKey("UserAuthId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("City");
+
+                    b.Navigation("EducationalBackground");
+
+                    b.Navigation("Enterprise");
+
+                    b.Navigation("PersonalIdentity");
+
+                    b.Navigation("Province");
+
+                    b.Navigation("UserAuth");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.UserInfoBankCard", b =>
+                {
+                    b.HasOne("FlexJobApi.Core.UserInfo", "UserInfo")
+                        .WithMany()
+                        .HasForeignKey("UserInfoId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("UserInfo");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.UserInfoCredential", b =>
+                {
+                    b.HasOne("FlexJobApi.Core.DictionaryData", "Type")
+                        .WithMany()
+                        .HasForeignKey("TypeCode")
+                        .HasPrincipalKey("Code")
+                        .OnDelete(DeleteBehavior.Restrict)
+                        .IsRequired();
+
+                    b.HasOne("FlexJobApi.Core.UserInfo", "UserInfo")
+                        .WithMany("UserInfoCredentials")
+                        .HasForeignKey("UserInfoId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("Type");
+
+                    b.Navigation("UserInfo");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.UserInfoDepartment", b =>
+                {
+                    b.HasOne("FlexJobApi.Core.Department", "Department")
+                        .WithMany()
+                        .HasForeignKey("DepartmentId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.HasOne("FlexJobApi.Core.UserInfo", "UserInfo")
+                        .WithMany("UserInfoDepartments")
+                        .HasForeignKey("UserInfoId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("Department");
+
+                    b.Navigation("UserInfo");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.UserInfoExpectJob", b =>
+                {
+                    b.HasOne("FlexJobApi.Core.DictionaryData", "PersonalIdentity")
+                        .WithMany()
+                        .HasForeignKey("PersonalIdentityCode")
+                        .HasPrincipalKey("Code")
+                        .OnDelete(DeleteBehavior.Restrict)
+                        .IsRequired();
+
+                    b.HasOne("FlexJobApi.Core.UserInfo", "UserInfo")
+                        .WithMany("UserInfoExpectJobs")
+                        .HasForeignKey("UserInfoId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("PersonalIdentity");
+
+                    b.Navigation("UserInfo");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.UserInfoPhoto", b =>
+                {
+                    b.HasOne("FlexJobApi.Core.UserInfo", "UserInfo")
+                        .WithMany()
+                        .HasForeignKey("UserInfoId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("UserInfo");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.UserInfoRole", b =>
+                {
+                    b.HasOne("FlexJobApi.Core.Role", "Role")
+                        .WithMany("UserInfoRoles")
+                        .HasForeignKey("RoleId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.HasOne("FlexJobApi.Core.UserInfo", "UserInfo")
+                        .WithMany("UserInfoRoles")
+                        .HasForeignKey("UserInfoId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("Role");
+
+                    b.Navigation("UserInfo");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.Department", b =>
+                {
+                    b.Navigation("Children");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.DictionaryData", b =>
+                {
+                    b.Navigation("Children");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.Enterprise", b =>
+                {
+                    b.Navigation("Departments");
+
+                    b.Navigation("UserInfos");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.Menu", b =>
+                {
+                    b.Navigation("Children");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.Role", b =>
+                {
+                    b.Navigation("RoleMenus");
+
+                    b.Navigation("RoleResources");
+
+                    b.Navigation("UserInfoRoles");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.TaskInfo", b =>
+                {
+                    b.Navigation("Benefits");
+
+                    b.Navigation("CredentialLimits");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.UserAuth", b =>
+                {
+                    b.Navigation("UserInfos");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.UserInfo", b =>
+                {
+                    b.Navigation("UserInfoCredentials");
+
+                    b.Navigation("UserInfoDepartments");
+
+                    b.Navigation("UserInfoExpectJobs");
+
+                    b.Navigation("UserInfoRoles");
+                });
+#pragma warning restore 612, 618
+        }
+    }
+}
diff --git a/FlexJobApi.Database.Migrations/Migrations/20250807051431_UpdateDictionaryData.cs b/FlexJobApi.Database.Migrations/Migrations/20250807051431_UpdateDictionaryData.cs
new file mode 100644
index 0000000..10d2c85
--- /dev/null
+++ b/FlexJobApi.Database.Migrations/Migrations/20250807051431_UpdateDictionaryData.cs
@@ -0,0 +1,847 @@
+锘縰sing System;
+using Microsoft.EntityFrameworkCore.Migrations;
+
+#nullable disable
+
+namespace FlexJobApi.Database.Migrations.Migrations
+{
+    /// <inheritdoc />
+    public partial class UpdateDictionaryData : Migration
+    {
+        /// <inheritdoc />
+        protected override void Up(MigrationBuilder migrationBuilder)
+        {
+            migrationBuilder.DropForeignKey(
+                name: "FK_Enterprise_DictionaryData_CityId",
+                table: "Enterprise");
+
+            migrationBuilder.DropForeignKey(
+                name: "FK_Enterprise_DictionaryData_IndustryTypeId",
+                table: "Enterprise");
+
+            migrationBuilder.DropForeignKey(
+                name: "FK_Enterprise_DictionaryData_ProvinceId",
+                table: "Enterprise");
+
+            migrationBuilder.DropForeignKey(
+                name: "FK_TaskInfo_DictionaryData_CityId",
+                table: "TaskInfo");
+
+            migrationBuilder.DropForeignKey(
+                name: "FK_TaskInfoBenefit_DictionaryData_BenefitId",
+                table: "TaskInfoBenefit");
+
+            migrationBuilder.DropForeignKey(
+                name: "FK_TaskInfoCredentialLimit_DictionaryData_TypeId",
+                table: "TaskInfoCredentialLimit");
+
+            migrationBuilder.DropForeignKey(
+                name: "FK_UserInfo_DictionaryData_CityId",
+                table: "UserInfo");
+
+            migrationBuilder.DropForeignKey(
+                name: "FK_UserInfo_DictionaryData_EducationalBackgroundId",
+                table: "UserInfo");
+
+            migrationBuilder.DropForeignKey(
+                name: "FK_UserInfo_DictionaryData_PersonalIdentityId",
+                table: "UserInfo");
+
+            migrationBuilder.DropForeignKey(
+                name: "FK_UserInfo_DictionaryData_ProvinceId",
+                table: "UserInfo");
+
+            migrationBuilder.DropForeignKey(
+                name: "FK_UserInfoCredential_DictionaryData_TypeId",
+                table: "UserInfoCredential");
+
+            migrationBuilder.DropForeignKey(
+                name: "FK_UserInfoExpectJob_DictionaryData_PersonalIdentityId",
+                table: "UserInfoExpectJob");
+
+            migrationBuilder.DropIndex(
+                name: "IX_UserInfoExpectJob_PersonalIdentityId",
+                table: "UserInfoExpectJob");
+
+            migrationBuilder.DropIndex(
+                name: "IX_UserInfoCredential_TypeId",
+                table: "UserInfoCredential");
+
+            migrationBuilder.DropIndex(
+                name: "IX_UserInfo_CityId",
+                table: "UserInfo");
+
+            migrationBuilder.DropIndex(
+                name: "IX_UserInfo_EducationalBackgroundId",
+                table: "UserInfo");
+
+            migrationBuilder.DropIndex(
+                name: "IX_UserInfo_PersonalIdentityId",
+                table: "UserInfo");
+
+            migrationBuilder.DropIndex(
+                name: "IX_UserInfo_ProvinceId",
+                table: "UserInfo");
+
+            migrationBuilder.DropIndex(
+                name: "IX_TaskInfoCredentialLimit_TypeId",
+                table: "TaskInfoCredentialLimit");
+
+            migrationBuilder.DropIndex(
+                name: "IX_TaskInfoBenefit_BenefitId",
+                table: "TaskInfoBenefit");
+
+            migrationBuilder.DropIndex(
+                name: "IX_TaskInfo_CityId",
+                table: "TaskInfo");
+
+            migrationBuilder.DropIndex(
+                name: "IX_Enterprise_CityId",
+                table: "Enterprise");
+
+            migrationBuilder.DropIndex(
+                name: "IX_Enterprise_IndustryTypeId",
+                table: "Enterprise");
+
+            migrationBuilder.DropIndex(
+                name: "IX_Enterprise_ProvinceId",
+                table: "Enterprise");
+
+            migrationBuilder.DropColumn(
+                name: "PersonalIdentityId",
+                table: "UserInfoExpectJob");
+
+            migrationBuilder.DropColumn(
+                name: "TypeId",
+                table: "UserInfoCredential");
+
+            migrationBuilder.DropColumn(
+                name: "CityId",
+                table: "UserInfo");
+
+            migrationBuilder.DropColumn(
+                name: "EducationalBackgroundId",
+                table: "UserInfo");
+
+            migrationBuilder.DropColumn(
+                name: "PersonalIdentityId",
+                table: "UserInfo");
+
+            migrationBuilder.DropColumn(
+                name: "ProvinceId",
+                table: "UserInfo");
+
+            migrationBuilder.DropColumn(
+                name: "TypeId",
+                table: "TaskInfoCredentialLimit");
+
+            migrationBuilder.DropColumn(
+                name: "BenefitId",
+                table: "TaskInfoBenefit");
+
+            migrationBuilder.DropColumn(
+                name: "CityId",
+                table: "TaskInfo");
+
+            migrationBuilder.DropColumn(
+                name: "CityId",
+                table: "Enterprise");
+
+            migrationBuilder.DropColumn(
+                name: "IndustryTypeId",
+                table: "Enterprise");
+
+            migrationBuilder.DropColumn(
+                name: "ProvinceId",
+                table: "Enterprise");
+
+            migrationBuilder.AddColumn<string>(
+                name: "PersonalIdentityCode",
+                table: "UserInfoExpectJob",
+                type: "nvarchar(128)",
+                nullable: false,
+                defaultValue: "");
+
+            migrationBuilder.AddColumn<string>(
+                name: "TypeCode",
+                table: "UserInfoCredential",
+                type: "nvarchar(128)",
+                nullable: false,
+                defaultValue: "");
+
+            migrationBuilder.AddColumn<string>(
+                name: "CityCode",
+                table: "UserInfo",
+                type: "nvarchar(128)",
+                nullable: true);
+
+            migrationBuilder.AddColumn<string>(
+                name: "EducationalBackgroundCode",
+                table: "UserInfo",
+                type: "nvarchar(128)",
+                nullable: true);
+
+            migrationBuilder.AddColumn<string>(
+                name: "PersonalIdentityCode",
+                table: "UserInfo",
+                type: "nvarchar(128)",
+                nullable: true);
+
+            migrationBuilder.AddColumn<string>(
+                name: "ProvinceCode",
+                table: "UserInfo",
+                type: "nvarchar(128)",
+                nullable: true);
+
+            migrationBuilder.AddColumn<string>(
+                name: "TypeCode",
+                table: "TaskInfoCredentialLimit",
+                type: "nvarchar(128)",
+                nullable: false,
+                defaultValue: "");
+
+            migrationBuilder.AddColumn<string>(
+                name: "BenefitCode",
+                table: "TaskInfoBenefit",
+                type: "nvarchar(128)",
+                nullable: false,
+                defaultValue: "");
+
+            migrationBuilder.AddColumn<string>(
+                name: "CityCode",
+                table: "TaskInfo",
+                type: "nvarchar(128)",
+                nullable: true);
+
+            migrationBuilder.AddColumn<string>(
+                name: "ProvinceCode",
+                table: "TaskInfo",
+                type: "nvarchar(128)",
+                nullable: true);
+
+            migrationBuilder.AddColumn<string>(
+                name: "CityCode",
+                table: "Enterprise",
+                type: "nvarchar(128)",
+                nullable: true);
+
+            migrationBuilder.AddColumn<string>(
+                name: "IndustryTypeCode",
+                table: "Enterprise",
+                type: "nvarchar(128)",
+                nullable: true);
+
+            migrationBuilder.AddColumn<string>(
+                name: "ProvinceCode",
+                table: "Enterprise",
+                type: "nvarchar(128)",
+                nullable: true);
+
+            migrationBuilder.AlterColumn<string>(
+                name: "Code",
+                table: "DictionaryData",
+                type: "nvarchar(128)",
+                maxLength: 128,
+                nullable: false,
+                defaultValue: "",
+                oldClrType: typeof(string),
+                oldType: "nvarchar(128)",
+                oldMaxLength: 128,
+                oldNullable: true);
+
+            migrationBuilder.AddUniqueConstraint(
+                name: "AK_DictionaryData_Code",
+                table: "DictionaryData",
+                column: "Code");
+
+            migrationBuilder.UpdateData(
+                table: "UserInfo",
+                keyColumn: "Id",
+                keyValue: new Guid("11111111-1111-1111-1111-111111111112"),
+                columns: new[] { "CityCode", "EducationalBackgroundCode", "PersonalIdentityCode", "ProvinceCode" },
+                values: new object[] { null, null, null, null });
+
+            migrationBuilder.CreateIndex(
+                name: "IX_UserInfoExpectJob_PersonalIdentityCode",
+                table: "UserInfoExpectJob",
+                column: "PersonalIdentityCode");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_UserInfoCredential_TypeCode",
+                table: "UserInfoCredential",
+                column: "TypeCode");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_UserInfo_CityCode",
+                table: "UserInfo",
+                column: "CityCode");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_UserInfo_EducationalBackgroundCode",
+                table: "UserInfo",
+                column: "EducationalBackgroundCode");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_UserInfo_PersonalIdentityCode",
+                table: "UserInfo",
+                column: "PersonalIdentityCode");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_UserInfo_ProvinceCode",
+                table: "UserInfo",
+                column: "ProvinceCode");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_TaskInfoCredentialLimit_TypeCode",
+                table: "TaskInfoCredentialLimit",
+                column: "TypeCode");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_TaskInfoBenefit_BenefitCode",
+                table: "TaskInfoBenefit",
+                column: "BenefitCode");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_TaskInfo_CityCode",
+                table: "TaskInfo",
+                column: "CityCode");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_TaskInfo_ProvinceCode",
+                table: "TaskInfo",
+                column: "ProvinceCode");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_Enterprise_CityCode",
+                table: "Enterprise",
+                column: "CityCode");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_Enterprise_IndustryTypeCode",
+                table: "Enterprise",
+                column: "IndustryTypeCode");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_Enterprise_ProvinceCode",
+                table: "Enterprise",
+                column: "ProvinceCode");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_DictionaryData_Code",
+                table: "DictionaryData",
+                column: "Code",
+                unique: true);
+
+            migrationBuilder.AddForeignKey(
+                name: "FK_Enterprise_DictionaryData_CityCode",
+                table: "Enterprise",
+                column: "CityCode",
+                principalTable: "DictionaryData",
+                principalColumn: "Code",
+                onDelete: ReferentialAction.Restrict);
+
+            migrationBuilder.AddForeignKey(
+                name: "FK_Enterprise_DictionaryData_IndustryTypeCode",
+                table: "Enterprise",
+                column: "IndustryTypeCode",
+                principalTable: "DictionaryData",
+                principalColumn: "Code",
+                onDelete: ReferentialAction.Restrict);
+
+            migrationBuilder.AddForeignKey(
+                name: "FK_Enterprise_DictionaryData_ProvinceCode",
+                table: "Enterprise",
+                column: "ProvinceCode",
+                principalTable: "DictionaryData",
+                principalColumn: "Code",
+                onDelete: ReferentialAction.Restrict);
+
+            migrationBuilder.AddForeignKey(
+                name: "FK_TaskInfo_DictionaryData_CityCode",
+                table: "TaskInfo",
+                column: "CityCode",
+                principalTable: "DictionaryData",
+                principalColumn: "Code",
+                onDelete: ReferentialAction.Restrict);
+
+            migrationBuilder.AddForeignKey(
+                name: "FK_TaskInfo_DictionaryData_ProvinceCode",
+                table: "TaskInfo",
+                column: "ProvinceCode",
+                principalTable: "DictionaryData",
+                principalColumn: "Code",
+                onDelete: ReferentialAction.Restrict);
+
+            migrationBuilder.AddForeignKey(
+                name: "FK_TaskInfoBenefit_DictionaryData_BenefitCode",
+                table: "TaskInfoBenefit",
+                column: "BenefitCode",
+                principalTable: "DictionaryData",
+                principalColumn: "Code",
+                onDelete: ReferentialAction.Restrict);
+
+            migrationBuilder.AddForeignKey(
+                name: "FK_TaskInfoCredentialLimit_DictionaryData_TypeCode",
+                table: "TaskInfoCredentialLimit",
+                column: "TypeCode",
+                principalTable: "DictionaryData",
+                principalColumn: "Code",
+                onDelete: ReferentialAction.Restrict);
+
+            migrationBuilder.AddForeignKey(
+                name: "FK_UserInfo_DictionaryData_CityCode",
+                table: "UserInfo",
+                column: "CityCode",
+                principalTable: "DictionaryData",
+                principalColumn: "Code",
+                onDelete: ReferentialAction.Restrict);
+
+            migrationBuilder.AddForeignKey(
+                name: "FK_UserInfo_DictionaryData_EducationalBackgroundCode",
+                table: "UserInfo",
+                column: "EducationalBackgroundCode",
+                principalTable: "DictionaryData",
+                principalColumn: "Code",
+                onDelete: ReferentialAction.Restrict);
+
+            migrationBuilder.AddForeignKey(
+                name: "FK_UserInfo_DictionaryData_PersonalIdentityCode",
+                table: "UserInfo",
+                column: "PersonalIdentityCode",
+                principalTable: "DictionaryData",
+                principalColumn: "Code",
+                onDelete: ReferentialAction.Restrict);
+
+            migrationBuilder.AddForeignKey(
+                name: "FK_UserInfo_DictionaryData_ProvinceCode",
+                table: "UserInfo",
+                column: "ProvinceCode",
+                principalTable: "DictionaryData",
+                principalColumn: "Code",
+                onDelete: ReferentialAction.Restrict);
+
+            migrationBuilder.AddForeignKey(
+                name: "FK_UserInfoCredential_DictionaryData_TypeCode",
+                table: "UserInfoCredential",
+                column: "TypeCode",
+                principalTable: "DictionaryData",
+                principalColumn: "Code",
+                onDelete: ReferentialAction.Restrict);
+
+            migrationBuilder.AddForeignKey(
+                name: "FK_UserInfoExpectJob_DictionaryData_PersonalIdentityCode",
+                table: "UserInfoExpectJob",
+                column: "PersonalIdentityCode",
+                principalTable: "DictionaryData",
+                principalColumn: "Code",
+                onDelete: ReferentialAction.Restrict);
+        }
+
+        /// <inheritdoc />
+        protected override void Down(MigrationBuilder migrationBuilder)
+        {
+            migrationBuilder.DropForeignKey(
+                name: "FK_Enterprise_DictionaryData_CityCode",
+                table: "Enterprise");
+
+            migrationBuilder.DropForeignKey(
+                name: "FK_Enterprise_DictionaryData_IndustryTypeCode",
+                table: "Enterprise");
+
+            migrationBuilder.DropForeignKey(
+                name: "FK_Enterprise_DictionaryData_ProvinceCode",
+                table: "Enterprise");
+
+            migrationBuilder.DropForeignKey(
+                name: "FK_TaskInfo_DictionaryData_CityCode",
+                table: "TaskInfo");
+
+            migrationBuilder.DropForeignKey(
+                name: "FK_TaskInfo_DictionaryData_ProvinceCode",
+                table: "TaskInfo");
+
+            migrationBuilder.DropForeignKey(
+                name: "FK_TaskInfoBenefit_DictionaryData_BenefitCode",
+                table: "TaskInfoBenefit");
+
+            migrationBuilder.DropForeignKey(
+                name: "FK_TaskInfoCredentialLimit_DictionaryData_TypeCode",
+                table: "TaskInfoCredentialLimit");
+
+            migrationBuilder.DropForeignKey(
+                name: "FK_UserInfo_DictionaryData_CityCode",
+                table: "UserInfo");
+
+            migrationBuilder.DropForeignKey(
+                name: "FK_UserInfo_DictionaryData_EducationalBackgroundCode",
+                table: "UserInfo");
+
+            migrationBuilder.DropForeignKey(
+                name: "FK_UserInfo_DictionaryData_PersonalIdentityCode",
+                table: "UserInfo");
+
+            migrationBuilder.DropForeignKey(
+                name: "FK_UserInfo_DictionaryData_ProvinceCode",
+                table: "UserInfo");
+
+            migrationBuilder.DropForeignKey(
+                name: "FK_UserInfoCredential_DictionaryData_TypeCode",
+                table: "UserInfoCredential");
+
+            migrationBuilder.DropForeignKey(
+                name: "FK_UserInfoExpectJob_DictionaryData_PersonalIdentityCode",
+                table: "UserInfoExpectJob");
+
+            migrationBuilder.DropIndex(
+                name: "IX_UserInfoExpectJob_PersonalIdentityCode",
+                table: "UserInfoExpectJob");
+
+            migrationBuilder.DropIndex(
+                name: "IX_UserInfoCredential_TypeCode",
+                table: "UserInfoCredential");
+
+            migrationBuilder.DropIndex(
+                name: "IX_UserInfo_CityCode",
+                table: "UserInfo");
+
+            migrationBuilder.DropIndex(
+                name: "IX_UserInfo_EducationalBackgroundCode",
+                table: "UserInfo");
+
+            migrationBuilder.DropIndex(
+                name: "IX_UserInfo_PersonalIdentityCode",
+                table: "UserInfo");
+
+            migrationBuilder.DropIndex(
+                name: "IX_UserInfo_ProvinceCode",
+                table: "UserInfo");
+
+            migrationBuilder.DropIndex(
+                name: "IX_TaskInfoCredentialLimit_TypeCode",
+                table: "TaskInfoCredentialLimit");
+
+            migrationBuilder.DropIndex(
+                name: "IX_TaskInfoBenefit_BenefitCode",
+                table: "TaskInfoBenefit");
+
+            migrationBuilder.DropIndex(
+                name: "IX_TaskInfo_CityCode",
+                table: "TaskInfo");
+
+            migrationBuilder.DropIndex(
+                name: "IX_TaskInfo_ProvinceCode",
+                table: "TaskInfo");
+
+            migrationBuilder.DropIndex(
+                name: "IX_Enterprise_CityCode",
+                table: "Enterprise");
+
+            migrationBuilder.DropIndex(
+                name: "IX_Enterprise_IndustryTypeCode",
+                table: "Enterprise");
+
+            migrationBuilder.DropIndex(
+                name: "IX_Enterprise_ProvinceCode",
+                table: "Enterprise");
+
+            migrationBuilder.DropUniqueConstraint(
+                name: "AK_DictionaryData_Code",
+                table: "DictionaryData");
+
+            migrationBuilder.DropIndex(
+                name: "IX_DictionaryData_Code",
+                table: "DictionaryData");
+
+            migrationBuilder.DropColumn(
+                name: "PersonalIdentityCode",
+                table: "UserInfoExpectJob");
+
+            migrationBuilder.DropColumn(
+                name: "TypeCode",
+                table: "UserInfoCredential");
+
+            migrationBuilder.DropColumn(
+                name: "CityCode",
+                table: "UserInfo");
+
+            migrationBuilder.DropColumn(
+                name: "EducationalBackgroundCode",
+                table: "UserInfo");
+
+            migrationBuilder.DropColumn(
+                name: "PersonalIdentityCode",
+                table: "UserInfo");
+
+            migrationBuilder.DropColumn(
+                name: "ProvinceCode",
+                table: "UserInfo");
+
+            migrationBuilder.DropColumn(
+                name: "TypeCode",
+                table: "TaskInfoCredentialLimit");
+
+            migrationBuilder.DropColumn(
+                name: "BenefitCode",
+                table: "TaskInfoBenefit");
+
+            migrationBuilder.DropColumn(
+                name: "CityCode",
+                table: "TaskInfo");
+
+            migrationBuilder.DropColumn(
+                name: "ProvinceCode",
+                table: "TaskInfo");
+
+            migrationBuilder.DropColumn(
+                name: "CityCode",
+                table: "Enterprise");
+
+            migrationBuilder.DropColumn(
+                name: "IndustryTypeCode",
+                table: "Enterprise");
+
+            migrationBuilder.DropColumn(
+                name: "ProvinceCode",
+                table: "Enterprise");
+
+            migrationBuilder.AddColumn<Guid>(
+                name: "PersonalIdentityId",
+                table: "UserInfoExpectJob",
+                type: "uniqueidentifier",
+                nullable: false,
+                defaultValue: new Guid("00000000-0000-0000-0000-000000000000"));
+
+            migrationBuilder.AddColumn<Guid>(
+                name: "TypeId",
+                table: "UserInfoCredential",
+                type: "uniqueidentifier",
+                nullable: true);
+
+            migrationBuilder.AddColumn<Guid>(
+                name: "CityId",
+                table: "UserInfo",
+                type: "uniqueidentifier",
+                nullable: true);
+
+            migrationBuilder.AddColumn<Guid>(
+                name: "EducationalBackgroundId",
+                table: "UserInfo",
+                type: "uniqueidentifier",
+                nullable: true);
+
+            migrationBuilder.AddColumn<Guid>(
+                name: "PersonalIdentityId",
+                table: "UserInfo",
+                type: "uniqueidentifier",
+                nullable: true);
+
+            migrationBuilder.AddColumn<Guid>(
+                name: "ProvinceId",
+                table: "UserInfo",
+                type: "uniqueidentifier",
+                nullable: true);
+
+            migrationBuilder.AddColumn<Guid>(
+                name: "TypeId",
+                table: "TaskInfoCredentialLimit",
+                type: "uniqueidentifier",
+                nullable: true);
+
+            migrationBuilder.AddColumn<Guid>(
+                name: "BenefitId",
+                table: "TaskInfoBenefit",
+                type: "uniqueidentifier",
+                nullable: false,
+                defaultValue: new Guid("00000000-0000-0000-0000-000000000000"));
+
+            migrationBuilder.AddColumn<Guid>(
+                name: "CityId",
+                table: "TaskInfo",
+                type: "uniqueidentifier",
+                nullable: false,
+                defaultValue: new Guid("00000000-0000-0000-0000-000000000000"));
+
+            migrationBuilder.AddColumn<Guid>(
+                name: "CityId",
+                table: "Enterprise",
+                type: "uniqueidentifier",
+                nullable: true);
+
+            migrationBuilder.AddColumn<Guid>(
+                name: "IndustryTypeId",
+                table: "Enterprise",
+                type: "uniqueidentifier",
+                nullable: true);
+
+            migrationBuilder.AddColumn<Guid>(
+                name: "ProvinceId",
+                table: "Enterprise",
+                type: "uniqueidentifier",
+                nullable: true);
+
+            migrationBuilder.AlterColumn<string>(
+                name: "Code",
+                table: "DictionaryData",
+                type: "nvarchar(128)",
+                maxLength: 128,
+                nullable: true,
+                oldClrType: typeof(string),
+                oldType: "nvarchar(128)",
+                oldMaxLength: 128);
+
+            migrationBuilder.UpdateData(
+                table: "UserInfo",
+                keyColumn: "Id",
+                keyValue: new Guid("11111111-1111-1111-1111-111111111112"),
+                columns: new[] { "CityId", "EducationalBackgroundId", "PersonalIdentityId", "ProvinceId" },
+                values: new object[] { null, null, null, null });
+
+            migrationBuilder.CreateIndex(
+                name: "IX_UserInfoExpectJob_PersonalIdentityId",
+                table: "UserInfoExpectJob",
+                column: "PersonalIdentityId");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_UserInfoCredential_TypeId",
+                table: "UserInfoCredential",
+                column: "TypeId");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_UserInfo_CityId",
+                table: "UserInfo",
+                column: "CityId");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_UserInfo_EducationalBackgroundId",
+                table: "UserInfo",
+                column: "EducationalBackgroundId");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_UserInfo_PersonalIdentityId",
+                table: "UserInfo",
+                column: "PersonalIdentityId");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_UserInfo_ProvinceId",
+                table: "UserInfo",
+                column: "ProvinceId");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_TaskInfoCredentialLimit_TypeId",
+                table: "TaskInfoCredentialLimit",
+                column: "TypeId");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_TaskInfoBenefit_BenefitId",
+                table: "TaskInfoBenefit",
+                column: "BenefitId");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_TaskInfo_CityId",
+                table: "TaskInfo",
+                column: "CityId");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_Enterprise_CityId",
+                table: "Enterprise",
+                column: "CityId");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_Enterprise_IndustryTypeId",
+                table: "Enterprise",
+                column: "IndustryTypeId");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_Enterprise_ProvinceId",
+                table: "Enterprise",
+                column: "ProvinceId");
+
+            migrationBuilder.AddForeignKey(
+                name: "FK_Enterprise_DictionaryData_CityId",
+                table: "Enterprise",
+                column: "CityId",
+                principalTable: "DictionaryData",
+                principalColumn: "Id");
+
+            migrationBuilder.AddForeignKey(
+                name: "FK_Enterprise_DictionaryData_IndustryTypeId",
+                table: "Enterprise",
+                column: "IndustryTypeId",
+                principalTable: "DictionaryData",
+                principalColumn: "Id");
+
+            migrationBuilder.AddForeignKey(
+                name: "FK_Enterprise_DictionaryData_ProvinceId",
+                table: "Enterprise",
+                column: "ProvinceId",
+                principalTable: "DictionaryData",
+                principalColumn: "Id");
+
+            migrationBuilder.AddForeignKey(
+                name: "FK_TaskInfo_DictionaryData_CityId",
+                table: "TaskInfo",
+                column: "CityId",
+                principalTable: "DictionaryData",
+                principalColumn: "Id",
+                onDelete: ReferentialAction.Cascade);
+
+            migrationBuilder.AddForeignKey(
+                name: "FK_TaskInfoBenefit_DictionaryData_BenefitId",
+                table: "TaskInfoBenefit",
+                column: "BenefitId",
+                principalTable: "DictionaryData",
+                principalColumn: "Id",
+                onDelete: ReferentialAction.Cascade);
+
+            migrationBuilder.AddForeignKey(
+                name: "FK_TaskInfoCredentialLimit_DictionaryData_TypeId",
+                table: "TaskInfoCredentialLimit",
+                column: "TypeId",
+                principalTable: "DictionaryData",
+                principalColumn: "Id");
+
+            migrationBuilder.AddForeignKey(
+                name: "FK_UserInfo_DictionaryData_CityId",
+                table: "UserInfo",
+                column: "CityId",
+                principalTable: "DictionaryData",
+                principalColumn: "Id");
+
+            migrationBuilder.AddForeignKey(
+                name: "FK_UserInfo_DictionaryData_EducationalBackgroundId",
+                table: "UserInfo",
+                column: "EducationalBackgroundId",
+                principalTable: "DictionaryData",
+                principalColumn: "Id");
+
+            migrationBuilder.AddForeignKey(
+                name: "FK_UserInfo_DictionaryData_PersonalIdentityId",
+                table: "UserInfo",
+                column: "PersonalIdentityId",
+                principalTable: "DictionaryData",
+                principalColumn: "Id");
+
+            migrationBuilder.AddForeignKey(
+                name: "FK_UserInfo_DictionaryData_ProvinceId",
+                table: "UserInfo",
+                column: "ProvinceId",
+                principalTable: "DictionaryData",
+                principalColumn: "Id");
+
+            migrationBuilder.AddForeignKey(
+                name: "FK_UserInfoCredential_DictionaryData_TypeId",
+                table: "UserInfoCredential",
+                column: "TypeId",
+                principalTable: "DictionaryData",
+                principalColumn: "Id");
+
+            migrationBuilder.AddForeignKey(
+                name: "FK_UserInfoExpectJob_DictionaryData_PersonalIdentityId",
+                table: "UserInfoExpectJob",
+                column: "PersonalIdentityId",
+                principalTable: "DictionaryData",
+                principalColumn: "Id",
+                onDelete: ReferentialAction.Cascade);
+        }
+    }
+}
diff --git a/FlexJobApi.Database.Migrations/Migrations/DefaultDbContextModelSnapshot.cs b/FlexJobApi.Database.Migrations/Migrations/DefaultDbContextModelSnapshot.cs
index b919251..7af560f 100644
--- a/FlexJobApi.Database.Migrations/Migrations/DefaultDbContextModelSnapshot.cs
+++ b/FlexJobApi.Database.Migrations/Migrations/DefaultDbContextModelSnapshot.cs
@@ -135,6 +135,7 @@
                         .HasColumnType("uniqueidentifier");
 
                     b.Property<string>("Code")
+                        .IsRequired()
                         .HasMaxLength(128)
                         .HasColumnType("nvarchar(128)");
 
@@ -191,6 +192,9 @@
 
                     b.HasIndex("CategoryId");
 
+                    b.HasIndex("Code")
+                        .IsUnique();
+
                     b.HasIndex("ParentId");
 
                     b.ToTable("DictionaryData");
@@ -212,8 +216,8 @@
                     b.Property<string>("BankName")
                         .HasColumnType("nvarchar(max)");
 
-                    b.Property<Guid?>("CityId")
-                        .HasColumnType("uniqueidentifier");
+                    b.Property<string>("CityCode")
+                        .HasColumnType("nvarchar(128)");
 
                     b.Property<string>("ContactEmail")
                         .HasColumnType("nvarchar(max)");
@@ -235,8 +239,8 @@
                     b.Property<Guid>("EnterpriseAuthId")
                         .HasColumnType("uniqueidentifier");
 
-                    b.Property<Guid?>("IndustryTypeId")
-                        .HasColumnType("uniqueidentifier");
+                    b.Property<string>("IndustryTypeCode")
+                        .HasColumnType("nvarchar(128)");
 
                     b.Property<bool>("IsCheckedBankCard")
                         .HasColumnType("bit");
@@ -253,8 +257,8 @@
                     b.Property<int?>("PayAccess")
                         .HasColumnType("int");
 
-                    b.Property<Guid?>("ProvinceId")
-                        .HasColumnType("uniqueidentifier");
+                    b.Property<string>("ProvinceCode")
+                        .HasColumnType("nvarchar(128)");
 
                     b.Property<int?>("RealAccess")
                         .HasColumnType("int");
@@ -285,13 +289,13 @@
 
                     b.HasKey("Id");
 
-                    b.HasIndex("CityId");
+                    b.HasIndex("CityCode");
 
                     b.HasIndex("EnterpriseAuthId");
 
-                    b.HasIndex("IndustryTypeId");
+                    b.HasIndex("IndustryTypeCode");
 
-                    b.HasIndex("ProvinceId");
+                    b.HasIndex("ProvinceCode");
 
                     b.ToTable("Enterprise");
                 });
@@ -733,8 +737,8 @@
                     b.Property<int>("BillingMethod")
                         .HasColumnType("int");
 
-                    b.Property<Guid>("CityId")
-                        .HasColumnType("uniqueidentifier");
+                    b.Property<string>("CityCode")
+                        .HasColumnType("nvarchar(128)");
 
                     b.Property<DateTimeOffset>("CreatedTime")
                         .HasColumnType("datetimeoffset");
@@ -758,6 +762,9 @@
                         .IsRequired()
                         .HasColumnType("nvarchar(max)");
 
+                    b.Property<string>("ProvinceCode")
+                        .HasColumnType("nvarchar(128)");
+
                     b.Property<decimal>("ServiceFee")
                         .HasColumnType("decimal(18,2)");
 
@@ -778,9 +785,11 @@
 
                     b.HasKey("Id");
 
-                    b.HasIndex("CityId");
+                    b.HasIndex("CityCode");
 
                     b.HasIndex("EnterpriseId");
+
+                    b.HasIndex("ProvinceCode");
 
                     b.ToTable("TaskInfo");
                 });
@@ -791,8 +800,9 @@
                         .ValueGeneratedOnAdd()
                         .HasColumnType("uniqueidentifier");
 
-                    b.Property<Guid>("BenefitId")
-                        .HasColumnType("uniqueidentifier");
+                    b.Property<string>("BenefitCode")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(128)");
 
                     b.Property<DateTimeOffset>("CreatedTime")
                         .HasColumnType("datetimeoffset");
@@ -820,7 +830,7 @@
 
                     b.HasKey("Id");
 
-                    b.HasIndex("BenefitId");
+                    b.HasIndex("BenefitCode");
 
                     b.HasIndex("TaskInfoId");
 
@@ -851,8 +861,9 @@
                     b.Property<string>("TraceId")
                         .HasColumnType("nvarchar(max)");
 
-                    b.Property<Guid?>("TypeId")
-                        .HasColumnType("uniqueidentifier");
+                    b.Property<string>("TypeCode")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(128)");
 
                     b.Property<DateTimeOffset?>("UpdatedTime")
                         .HasColumnType("datetimeoffset");
@@ -864,7 +875,7 @@
 
                     b.HasIndex("TaskInfoId");
 
-                    b.HasIndex("TypeId");
+                    b.HasIndex("TypeCode");
 
                     b.ToTable("TaskInfoCredentialLimit");
                 });
@@ -1020,8 +1031,8 @@
                     b.Property<string>("Avatar")
                         .HasColumnType("nvarchar(max)");
 
-                    b.Property<Guid?>("CityId")
-                        .HasColumnType("uniqueidentifier");
+                    b.Property<string>("CityCode")
+                        .HasColumnType("nvarchar(128)");
 
                     b.Property<DateTimeOffset>("CreatedTime")
                         .HasColumnType("datetimeoffset");
@@ -1029,8 +1040,8 @@
                     b.Property<Guid?>("CreatedUserInfoId")
                         .HasColumnType("uniqueidentifier");
 
-                    b.Property<Guid?>("EducationalBackgroundId")
-                        .HasColumnType("uniqueidentifier");
+                    b.Property<string>("EducationalBackgroundCode")
+                        .HasColumnType("nvarchar(128)");
 
                     b.Property<Guid?>("EnterpriseId")
                         .HasColumnType("uniqueidentifier");
@@ -1050,11 +1061,11 @@
                     b.Property<int>("Level")
                         .HasColumnType("int");
 
-                    b.Property<Guid?>("PersonalIdentityId")
-                        .HasColumnType("uniqueidentifier");
+                    b.Property<string>("PersonalIdentityCode")
+                        .HasColumnType("nvarchar(128)");
 
-                    b.Property<Guid?>("ProvinceId")
-                        .HasColumnType("uniqueidentifier");
+                    b.Property<string>("ProvinceCode")
+                        .HasColumnType("nvarchar(128)");
 
                     b.Property<string>("Remark")
                         .HasColumnType("nvarchar(max)");
@@ -1095,15 +1106,15 @@
 
                     b.HasKey("Id");
 
-                    b.HasIndex("CityId");
+                    b.HasIndex("CityCode");
 
-                    b.HasIndex("EducationalBackgroundId");
+                    b.HasIndex("EducationalBackgroundCode");
 
                     b.HasIndex("EnterpriseId");
 
-                    b.HasIndex("PersonalIdentityId");
+                    b.HasIndex("PersonalIdentityCode");
 
-                    b.HasIndex("ProvinceId");
+                    b.HasIndex("ProvinceCode");
 
                     b.HasIndex("UserAuthId");
 
@@ -1219,8 +1230,9 @@
                     b.Property<string>("TraceId")
                         .HasColumnType("nvarchar(max)");
 
-                    b.Property<Guid?>("TypeId")
-                        .HasColumnType("uniqueidentifier");
+                    b.Property<string>("TypeCode")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(128)");
 
                     b.Property<DateTimeOffset?>("UpdatedTime")
                         .HasColumnType("datetimeoffset");
@@ -1233,7 +1245,7 @@
 
                     b.HasKey("Id");
 
-                    b.HasIndex("TypeId");
+                    b.HasIndex("TypeCode");
 
                     b.HasIndex("UserInfoId");
 
@@ -1297,8 +1309,9 @@
                     b.Property<bool>("IsDeleted")
                         .HasColumnType("bit");
 
-                    b.Property<Guid>("PersonalIdentityId")
-                        .HasColumnType("uniqueidentifier");
+                    b.Property<string>("PersonalIdentityCode")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(128)");
 
                     b.Property<int>("Sort")
                         .HasColumnType("int");
@@ -1317,7 +1330,7 @@
 
                     b.HasKey("Id");
 
-                    b.HasIndex("PersonalIdentityId");
+                    b.HasIndex("PersonalIdentityCode");
 
                     b.HasIndex("UserInfoId");
 
@@ -1444,7 +1457,9 @@
                 {
                     b.HasOne("FlexJobApi.Core.DictionaryData", "City")
                         .WithMany()
-                        .HasForeignKey("CityId");
+                        .HasForeignKey("CityCode")
+                        .HasPrincipalKey("Code")
+                        .OnDelete(DeleteBehavior.Restrict);
 
                     b.HasOne("FlexJobApi.Core.EnterpriseAuth", "EnterpriseAuth")
                         .WithMany()
@@ -1454,11 +1469,15 @@
 
                     b.HasOne("FlexJobApi.Core.DictionaryData", "IndustryType")
                         .WithMany()
-                        .HasForeignKey("IndustryTypeId");
+                        .HasForeignKey("IndustryTypeCode")
+                        .HasPrincipalKey("Code")
+                        .OnDelete(DeleteBehavior.Restrict);
 
                     b.HasOne("FlexJobApi.Core.DictionaryData", "Province")
                         .WithMany()
-                        .HasForeignKey("ProvinceId");
+                        .HasForeignKey("ProvinceCode")
+                        .HasPrincipalKey("Code")
+                        .OnDelete(DeleteBehavior.Restrict);
 
                     b.Navigation("City");
 
@@ -1520,9 +1539,9 @@
                 {
                     b.HasOne("FlexJobApi.Core.DictionaryData", "City")
                         .WithMany()
-                        .HasForeignKey("CityId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
+                        .HasForeignKey("CityCode")
+                        .HasPrincipalKey("Code")
+                        .OnDelete(DeleteBehavior.Restrict);
 
                     b.HasOne("FlexJobApi.Core.Enterprise", "Enterprise")
                         .WithMany()
@@ -1530,17 +1549,26 @@
                         .OnDelete(DeleteBehavior.Cascade)
                         .IsRequired();
 
+                    b.HasOne("FlexJobApi.Core.DictionaryData", "Province")
+                        .WithMany()
+                        .HasForeignKey("ProvinceCode")
+                        .HasPrincipalKey("Code")
+                        .OnDelete(DeleteBehavior.Restrict);
+
                     b.Navigation("City");
 
                     b.Navigation("Enterprise");
+
+                    b.Navigation("Province");
                 });
 
             modelBuilder.Entity("FlexJobApi.Core.TaskInfoBenefit", b =>
                 {
                     b.HasOne("FlexJobApi.Core.DictionaryData", "Benefit")
                         .WithMany()
-                        .HasForeignKey("BenefitId")
-                        .OnDelete(DeleteBehavior.Cascade)
+                        .HasForeignKey("BenefitCode")
+                        .HasPrincipalKey("Code")
+                        .OnDelete(DeleteBehavior.Restrict)
                         .IsRequired();
 
                     b.HasOne("FlexJobApi.Core.TaskInfo", "TaskInfo")
@@ -1564,7 +1592,10 @@
 
                     b.HasOne("FlexJobApi.Core.DictionaryData", "Type")
                         .WithMany()
-                        .HasForeignKey("TypeId");
+                        .HasForeignKey("TypeCode")
+                        .HasPrincipalKey("Code")
+                        .OnDelete(DeleteBehavior.Restrict)
+                        .IsRequired();
 
                     b.Navigation("TaskInfo");
 
@@ -1594,11 +1625,15 @@
                 {
                     b.HasOne("FlexJobApi.Core.DictionaryData", "City")
                         .WithMany()
-                        .HasForeignKey("CityId");
+                        .HasForeignKey("CityCode")
+                        .HasPrincipalKey("Code")
+                        .OnDelete(DeleteBehavior.Restrict);
 
                     b.HasOne("FlexJobApi.Core.DictionaryData", "EducationalBackground")
                         .WithMany()
-                        .HasForeignKey("EducationalBackgroundId");
+                        .HasForeignKey("EducationalBackgroundCode")
+                        .HasPrincipalKey("Code")
+                        .OnDelete(DeleteBehavior.Restrict);
 
                     b.HasOne("FlexJobApi.Core.Enterprise", "Enterprise")
                         .WithMany("UserInfos")
@@ -1606,11 +1641,15 @@
 
                     b.HasOne("FlexJobApi.Core.DictionaryData", "PersonalIdentity")
                         .WithMany()
-                        .HasForeignKey("PersonalIdentityId");
+                        .HasForeignKey("PersonalIdentityCode")
+                        .HasPrincipalKey("Code")
+                        .OnDelete(DeleteBehavior.Restrict);
 
                     b.HasOne("FlexJobApi.Core.DictionaryData", "Province")
                         .WithMany()
-                        .HasForeignKey("ProvinceId");
+                        .HasForeignKey("ProvinceCode")
+                        .HasPrincipalKey("Code")
+                        .OnDelete(DeleteBehavior.Restrict);
 
                     b.HasOne("FlexJobApi.Core.UserAuth", "UserAuth")
                         .WithMany("UserInfos")
@@ -1646,7 +1685,10 @@
                 {
                     b.HasOne("FlexJobApi.Core.DictionaryData", "Type")
                         .WithMany()
-                        .HasForeignKey("TypeId");
+                        .HasForeignKey("TypeCode")
+                        .HasPrincipalKey("Code")
+                        .OnDelete(DeleteBehavior.Restrict)
+                        .IsRequired();
 
                     b.HasOne("FlexJobApi.Core.UserInfo", "UserInfo")
                         .WithMany("UserInfoCredentials")
@@ -1682,8 +1724,9 @@
                 {
                     b.HasOne("FlexJobApi.Core.DictionaryData", "PersonalIdentity")
                         .WithMany()
-                        .HasForeignKey("PersonalIdentityId")
-                        .OnDelete(DeleteBehavior.Cascade)
+                        .HasForeignKey("PersonalIdentityCode")
+                        .HasPrincipalKey("Code")
+                        .OnDelete(DeleteBehavior.Restrict)
                         .IsRequired();
 
                     b.HasOne("FlexJobApi.Core.UserInfo", "UserInfo")
diff --git a/FlexJobApi.Database.Migrations/REDEME.MD b/FlexJobApi.Database.Migrations/REDEME.MD
index 66ab628..75c52e5 100644
--- a/FlexJobApi.Database.Migrations/REDEME.MD
+++ b/FlexJobApi.Database.Migrations/REDEME.MD
@@ -1,7 +1,7 @@
 -------------------------------主数据库---------------------------------------
 
 新增迁移文件
-dotnet ef migrations add UpdateResource0806002 -s "../FlexJobApi.Web.Entry" -c DefaultDbContext
+dotnet ef migrations add UpdateDictionaryData -s "../FlexJobApi.Web.Entry" -c DefaultDbContext
 
 删除迁移文件
 dotnet ef migrations remove -s "../FlexJobApi.Web.Entry" -c DefaultDbContext
diff --git a/FlexJobApi.User.Application/Enterprises/Queries/EnterprisesQueryHandler.cs b/FlexJobApi.User.Application/Enterprises/Queries/EnterprisesQueryHandler.cs
index a8917d7..fdece96 100644
--- a/FlexJobApi.User.Application/Enterprises/Queries/EnterprisesQueryHandler.cs
+++ b/FlexJobApi.User.Application/Enterprises/Queries/EnterprisesQueryHandler.cs
@@ -50,11 +50,11 @@
             }
             var s = (from e in q
                      join a in repEnterpriseAuth.AsQueryable().AsNoTracking() on e.EnterpriseAuthId equals a.Id
-                     join p in repDictionaryData.AsQueryable().AsNoTracking() on e.ProvinceId equals p.Id into pg
+                     join p in repDictionaryData.AsQueryable().AsNoTracking() on e.ProvinceCode equals p.Code into pg
                      from pgi in pg.DefaultIfEmpty()
-                     join c in repDictionaryData.AsQueryable().AsNoTracking() on e.CityId equals c.Id into cg
+                     join c in repDictionaryData.AsQueryable().AsNoTracking() on e.CityCode equals c.Code into cg
                      from cgi in cg.DefaultIfEmpty()
-                     join i in repDictionaryData.AsQueryable().AsNoTracking() on e.IndustryTypeId equals i.Id into ig
+                     join i in repDictionaryData.AsQueryable().AsNoTracking() on e.IndustryTypeCode equals i.Code into ig
                      from igi in ig.DefaultIfEmpty()
                      select new GetEnterprisesQueryResultItem
                      {

--
Gitblit v1.9.1