Resume全栈项目(.NET)
文章目录
- 项目地址
- 一、数据库准备/日志安装
- 1.1 创建实体层
- 1. Entities
- 2. Enums 存放枚举
- 1.2 创建数据库层
- 1. 安装Persistance层需要的库
- 2. 创建ResumeDbContext
- 3. 添加数据库配置/注册DBContext
- 4. 执行Add-Migration
- 5. 修改字段类型
- 6. Enum支持Json
- 1.3 安装Serilog
- 1. Api层安装所需要的包
- 2. 在appsetting里配置
- 3. 注册Serilog在Program里
- 4.EfCore开启日志
- 5. 在Hanlder里使用
- 二、Application层
项目地址
- 教程作者:
- 教程地址:
https://www.CSDN.com/watch?v=AiwzQMupPsU
- 代码仓库地址作者:
https://github.com/mohammad-taheri1/Youtube-Resume-Management-dotnet-react-ts
- 代码仓库自己:
https://github.com/CXTV/Resume/tree/main/backend
一、数据库准备/日志安装
1.1 创建实体层
1. Entities
BaseEntity.cs
namespace ResumeManagement.Domain.Entities
{public abstract class BaseEntity{public Guid ID { get; set; } public DateTime CreatedAt { get; set; } = DateTime.Now;public DateTime UpdateAt { get; set; } = DateTime.Now;public bool isActive { get; set; } = true; }
}
Company.cs
: 里面有Job的Collection
namespace ResumeManagement.Domain.Entities
{public class Company:BaseEntity{public string Name { get; set; }public CompanySize Size { get; set; }//relations 一对多public ICollection<Job> Jobs { get; set; }}
}
Job.cs
:每个职位有对应的公司id和名称,一个职位有多个候选人
namespace ResumeManagement.Domain.Entities
{public class Job: BaseEntity{public string Title { get; set; }public JobLevel Level { get; set; }//relations 多对一public Guid CompanyID { get; set; }public Company Company { get; set; }//relations 一对多一个职位可以有多个候选人public ICollection<Candidate> Candidates { get; set; }}
}
Candidate.cs
: 每个候选人,有投递的工作ID和工作名称
namespace ResumeManagement.Domain.Entities
{public class Candidate: BaseEntity{public string FirstName { get; set; }public string LastName { get; set; }public string Email { get; set; }public string Phone { get; set; }public string CoverLetter { get; set; }public string ResumeUrl { get; set; }//relations 多对一public Guid JobID { get; set; }public Job Job { get; set; }}
}
2. Enums 存放枚举
- 公司规模的枚举
namespace ResumeManagement.Domain.Enums
{public enum CompanySize{Small,Medium,Large}
}
2.工作等级的
1.2 创建数据库层
1. 安装Persistance层需要的库
2. 创建ResumeDbContext
- 这里定义表的关系
3. 添加数据库配置/注册DBContext
- API层数据库连接
appsettings.json
{"Logging": {"LogLevel": {"Default": "Information","Microsoft.AspNetCore": "Warning"}},"ConnectionStrings": {"ResumeDBConnectionStrings": "Server=.;Database=ResumeDB;Trusted_Connection=True;MultipleActiveResultSets=true;TrustServerCertificate=True;"},"AllowedHosts": "*"
}
- 在Persistance层创建
PersistanceRegistration.cs
文件
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;namespace ResumenManagement.Persistance
{public static class PersistanceRegistration{public static void AddPersistanceRegistration(this IServiceCollection services, IConfiguration configuration){services.AddDbContext<ResumeDbContext>(options =>options.UseSqlServer(configuration.GetConnectionString("ResumeDBConnectionStrings")));}}
}
- 在Api层里注册
4. 执行Add-Migration
- 注意:如果从新添加了文件夹,一定要build项目之后,重启项目,才会执行migration成功
- 执行成功后,在数据里,就可以看到我们的表
5. 修改字段类型
- 在我们创建完成表之后,返现Size是int类型,Job里的Level也是int类型,这是因为枚举类型造成的原因,需要在DbContext里修改类型
6. Enum支持Json
- 在
Program.cs
里添加
builder.Services.AddControllers().AddJsonOptions(options =>
{options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
});
1.3 安装Serilog
1. Api层安装所需要的包
2. 在appsetting里配置
- 直接配置在setting之后,就不需要在中间件里配置
"Serilog": {"MinimumLevel": {"Override": {"Microsoft": "Warning","Microsoft.EntityFrameworkCore": "Information"}},"WriteTo": [{"Name": "Console","Args": {"outputTemplate": "[{Timestamp:dd-MM HH:mm:ss} {Level:u3}] |{SourceContext}| {NewLine}{Message:lj}{NewLine}{Exception}"}},{"Name": "File","Args": {"path": "Logs/Resturant-API-.log","rollingInterval": "Day","rollOnFileSizeLimit": true,"formatter": "Serilog.Formatting.Compact.CompactJsonFormatter, Serilog.Formatting.Compact"}}]},"AllowedHosts": "*"
3. 注册Serilog在Program里
- 注册服务以及中间件
4.EfCore开启日志
- 在Persistence层里,efCore服务注册的地方
PersistanceRegistration.cs
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using ResumenManagement.Application.Contracts.Persistance;
using ResumenManagement.Persistance.Repositories;namespace ResumenManagement.Persistance
{public static class PersistanceRegistration{public static void AddPersistanceRegistration(this IServiceCollection services, IConfiguration configuration){services.AddDbContext<ResumeDbContext>(options =>options.UseSqlServer(configuration.GetConnectionString("ResumeDBConnectionStrings")).EnableSensitiveDataLogging() // 启用敏感数据记录);services.AddScoped(typeof(IAsyncRepository<>), typeof(BaseRepository<>));services.AddScoped<ICompanyRepository, CompanyRepository>();}}
}
5. 在Hanlder里使用
- 需要先在Application层安装一个包才可以使用
- 注册服务以及使用
二、Application层
2.1 安装MediaR和AutoMapper
1. 安装所需要的包和引用
2. 添加ApplicationRegistration
- 在Application层添加
ApplicationRegistration.cs
using Microsoft.Extensions.DependencyInjection;namespace ResumenManagement.Application
{public static class ApplicationRegistration{public static void AddApplicationRegistration(this IServiceCollection services){//1.获取应用程序程序集var applicationAssembly = typeof(ApplicationRegistration).Assembly;//2.注册所有MediatR处理程序services.AddMediatR(cfg => cfg.RegisterServicesFromAssembly(applicationAssembly));//3.注册所有AutoMapper配置services.AddAutoMapper(applicationAssembly); }}
}
3. 在Program里注册
Program.cs
里添加ApplicationRegistration