Asp.net core WebApi

一、WebApi launchSetting.json

没用的都删掉

{
  "$schema": "http://json.schemastore.org/launchsettings.json",
  "profiles": {
    "webApi": {
      "commandName": "Project",
      "launchBrowser": true,
      "launchUrl": "weatherforecast",
      "applicationUrl": "http://localhost:5000",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}

Startup里面的配置

没有使用services.AddMvc(),它提供的服务太多了,用不上
services.AddControllers()仅仅包换构建api的一些服务 有他就够用了

     public void ConfigureServices(IServiceCollection services)
        {
            //服务的容器,这里注册的服务,已经注册的服务,可以通过依赖注入的方式在其他地方使用
            //服务的概念 :在整个程序中做一些通用性操作的组件
            services.AddControllers(
                configure: setup =>
                {
                    //请求的类型和服务器所支持的类型不一致,就会返回406状态码
                    setup.ReturnHttpNotAcceptable = true;
                    //添加返回格式支持
                    // setup.OutputFormatters.Add(new XmlDataContractSerializerOutputFormatter());
                    //修改默认格式
                }
                )
                .AddXmlDataContractSerializerFormatters();//推荐这种方法
            //仅仅包换构建api的一些服务 有他就够用了
            //services.AddMvc();//提供的服务太多了,用不上
            services.AddScoped<ICompanyRepository, CompanyRepository>();
            //添加Sqlite服务,并配置生成的迷你数据库文件的名字
            services.AddDbContext<RoutingDbcontext>(
                optionsAction:options=>options.UseSqlite(connectionString:"Data Source = routine.db")
                );
            services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());
        }

数据库类配置

然后数据库迁移就行了

  public class RoutingDbcontext:DbContext
    {
        //调用父类把options配置传过去才能工作
        public RoutingDbcontext(DbContextOptions<RoutingDbcontext> options):base(options)
        {
        }
        //映射数据库的两个表
        public DbSet<Company> companies { set; get; }
        public DbSet<Employee> employees { set; get; }

        //-------------------  add Limit  ----------------
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Company>().Property(x => x.Name).IsRequired().HasMaxLength(100);//添加限制

            //this specified for between two class of relationship
            modelBuilder.Entity<Employee>().HasOne(navigationExpression: x => x.Company)//导航属性时company(一个员工在一个公司)
                .WithMany(navigationExpression: x => x.Employees)//反过来时Emploees (一个公司拥有多个员工的集合)
            .HasForeignKey(x => x.CompanyId).OnDelete(DeleteBehavior.Restrict);//外键时CompanyId,删除的时候公司有员工的话是无法删除的
           //seed data 种子数据
            modelBuilder.Entity<Company>().HasData(new Company {
                Id = Guid.Parse("00000000-0000-0000-0000-000000000001"),
                Name="Microsoft",
                Introduction="Great Company"
            });
        }
    }

将一个对象映射到另一个对象
安装包:AutoMapper.Extensions.Microsoft.DependencyInjection
添加服务

 services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());

创建Profile文件夹添加CompanyProfile.cs类继承自AutoMapper.Profile

    public class CompanyProfile:Profile
    {
        //映射的配置文件
        public CompanyProfile()
        {
            //从Company映射到CompanyDto
            //约定:1.原属性和目标属性一样的话,他属性的值就会赋给目标属性
            //2.如果目标的属性再原属性中不存在,直接就忽略了,不会对它进行赋值
            // 原类型Company映射到CompanyDto
            CreateMap<Company, CompanyDto>()
            //执行手动映射(常用)
            .ForMember(
                //Name  映射到 CompanyName
                destinationMember: dest => dest.CompanyName,
                memberOptions: opt => opt.MapFrom(mapExpression: src => src.Name)
                );
        }
    }

使用

//注入IMapper服务 _mapper
var companyDtos = _mapper.Map<IEnumerable<CompanyDto>>(companies);
var companyDto = _mapper.Map<CompanyDto>(company);
posted @ 2020-11-17 16:04  李花花小番茄  阅读(190)  评论(0编辑  收藏  举报