zoukankan      html  css  js  c++  java
  • 基于core3.1的Routine.Api项目webapi开发记录(一)

    1 创建项目

      选择asp.net core 项目,core3.1  api

      命名Routine.Api 

    2 安装nuget依赖包

      Microsoft.EntityFrameworkCore.Tools

      Microsoft.EntityFrameworkCore.Sqlite

    3 添加实体类和数据库上下文类

      

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    
    namespace Routine.Api.Entities
    {
        public class Company
        {
            public Guid Id { get; set; }
            public string Name { get; set; }
            public string Introduction { get; set; }
    
            public ICollection<Employee> Employees { get; set; }
    
        }
    }
    using System;
    
    namespace Routine.Api.Entities
    {
        public class Employee
        {
            public Guid Id { get; set; }
    
            public Guid CompanyId { get; set; }
            public string EmployeeNo { get; set; }
            public string FirstName { get; set; }
            public string LastName { get; set; }
    
            public Gender Gender { get; set; }
            public DateTime DateOfiBirth { get; set; }
    
            public Company Company { get; set; }
    
    
        }
    }
    namespace Routine.Api.Entities
    {
        public enum Gender
        {
            男=1,
            女=2
           
        }
    }
    using Microsoft.EntityFrameworkCore;
    using Routine.Api.Entities;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    
    namespace Routine.Api.Data
    {
        public class RoutineDbContext:DbContext
        {
            public RoutineDbContext(DbContextOptions<RoutineDbContext> options)
                :base(options)
            {
    
            }
            public DbSet<Company> Companies { get; set; }
            public DbSet<Employee> Employees { get; set; }
    
            protected override void OnModelCreating(ModelBuilder modelBuilder)
            {
                modelBuilder.Entity<Company>()
                    .Property(x => x.Name).IsRequired().HasMaxLength(100);
                modelBuilder.Entity<Company>()
                    .Property(x => x.Introduction).HasMaxLength(500);
    
                modelBuilder.Entity<Employee>()
                    .Property(x => x.EmployeeNo).IsRequired().HasMaxLength(10);
                modelBuilder.Entity<Employee>()
                    .Property(x => x.FirstName).IsRequired().HasMaxLength(50);
                modelBuilder.Entity<Employee>()
                   .Property(x => x.LastName).IsRequired().HasMaxLength(50);
    
                modelBuilder.Entity<Employee>()
                    .HasOne(x => x.Company)
                    .WithMany(x => x.Employees)
                    .HasForeignKey(x => x.CompanyId).OnDelete(DeleteBehavior.Restrict);
    
                modelBuilder.Entity<Company>().HasData(
                    new Company { 
                        Id=Guid.NewGuid(),
                        Name="Microsoft",
                        Introduction="Great Company"        
                     },
                    new Company
                    {
                        Id = Guid.NewGuid(),
                        Name = "Google",
                        Introduction = "Dont Company"
                    },
                    new Company
                    {
                        Id = Guid.NewGuid(),
                        Name = "Alipapa",
                        Introduction = "Fubao Company"
                    });
    
            }
        }
    }

    4 添加服务类

    using Routine.Api.Entities;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    
    namespace Routine.Api.Services
    {
        public interface ICompanyRepository
        {
            Task<IEnumerable<Company>> GetCompaniesAsync();
            Task<IEnumerable<Company>> GetCompaniesAsync(IEnumerable<Guid> companyIds);
    
            Task<Company> GetCompanyAsync(Guid companyId);
    
            void AddCompany(Company company);
    
            void UpdateCompany(Company company);
            void DeleteCompany(Company company);
    
            Task<bool> CompanyExistsAsync(Guid companyId);
    
    
    
            Task<IEnumerable<Employee>> GetEmployeesAsync(Guid companyId);
    
            Task<Employee> GetEmployeesAsync(Guid companyId,Guid employeeId);
    
            void AddEmployee(Guid companyId, Employee employee);
    
            void UpdateEmployee(Employee employee);
            void DeleteEmployee(Employee employee);
    
            Task<bool> SaveAsync();
    
    
        }
    }
    using Microsoft.EntityFrameworkCore;
    using Routine.Api.Data;
    using Routine.Api.Entities;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    
    namespace Routine.Api.Services
    {
        public class CompanyRepository : ICompanyRepository
        {
            private readonly RoutineDbContext _context;
            public CompanyRepository(RoutineDbContext context)
            {
                _context = context??throw new ArgumentNullException(nameof(context));
            }
    
            public async Task<IEnumerable<Company>> GetCompaniesAsync()
            {
                return await _context.Companies.ToListAsync();
            }
    
            public async Task<IEnumerable<Company>> GetCompaniesAsync(IEnumerable<Guid> companyIds)
            {
                if (companyIds == null)
                {
                    throw new ArgumentNullException(nameof(companyIds));
                }
                return await _context.Companies
                    .Where(x => companyIds.Contains(x.Id))
                    .OrderBy(x => x.Name)
                    .ToListAsync();
            }
    
            public async Task<Company> GetCompanyAsync(Guid companyId)
            {
                if (companyId == Guid.Empty)
                {
                    throw new ArgumentNullException(nameof(companyId));
                }
                return await _context.Companies.FirstOrDefaultAsync(x => x.Id == companyId);
            }
    
    
            public void AddCompany(Company company)
            {
                if (company == null)
                {
                    throw new ArgumentNullException(nameof(company));
                }
                company.Id = Guid.NewGuid();
    
                foreach (var employee in company.Employees)
                {
                    employee.Id = Guid.NewGuid();
                }
                _context.Companies.Add(company);
            }
    
            public void UpdateCompany(Company company)
            {
                //if (company == null)
                //{
                //    throw new ArgumentNullException(nameof(company));
                //}
                //_context.Entry<Company>(company).State = EntityState.Modified;
            }
    
    
            public void DeleteCompany(Company company)
            {
                if (company == null)
                {
                    throw new ArgumentNullException(nameof(company));
                }
                _context.Companies.Remove(company);
            }
    
            public async Task<bool> CompanyExistsAsync(Guid companyId)
            {
                if (companyId == Guid.Empty)
                {
                    throw new ArgumentNullException(nameof(companyId));
                }
    
                return await _context.Companies.AnyAsync(x => x.Id == companyId);
            }
    
    
    
            public async Task<IEnumerable<Employee>> GetEmployeesAsync(Guid companyId)
            {
                if (companyId == Guid.Empty)
                {
                    throw new ArgumentNullException(nameof(companyId));
                }
                return await _context.Employees
                    .Where(x => x.CompanyId == companyId)
                    .OrderBy(x => x.EmployeeNo)
                    .ToListAsync();
            }
    
            public async Task<Employee> GetEmployeesAsync(Guid companyId, Guid employeeId)
            {
                if (companyId == Guid.Empty)
                {
                    throw new ArgumentNullException(nameof(companyId));
                }
                if (employeeId == Guid.Empty)
                {
                    throw new ArgumentNullException(nameof(employeeId));
                }
                return await _context.Employees
                   .Where(x => x.CompanyId == companyId&& x.Id==employeeId)
                   .FirstOrDefaultAsync();
            }
    
    
    
    
    
            public void AddEmployee(Guid companyId, Employee employee)
            {
                if (companyId == Guid.Empty)
                {
                    throw new ArgumentNullException(nameof(companyId));
                }
                if (employee == null)
                {
                    throw new ArgumentNullException(nameof(employee));
                }
                employee.CompanyId = companyId;
                _context.Employees.Add(employee);
            }
    
           
           
            public void DeleteEmployee(Employee employee)
            {
                if (employee == null)
                {
                    throw new ArgumentNullException(nameof(employee));
                }
                _context.Employees.Remove(employee);
            }
    
            
    
            
    
            public void UpdateEmployee(Employee employee)
            {
                //_context.Employees
            }
    
            public async Task<bool> SaveAsync()
            {
                return await _context.SaveChangesAsync() >= 0;
            }
    
        }
    }

    5 startup类中注册服务

      

     public void ConfigureServices(IServiceCollection services)
            {
                services.AddControllers();
                services.AddScoped<ICompanyRepository, CompanyRepository>();
                services.AddDbContext<RoutineDbContext>(builder=> {
                    builder.UseSqlite("Data Source=routine.db");
                });
            }

    6 Program中添加自动迁移代码

    public static void Main(string[] args)
            {
                var host = CreateHostBuilder(args).Build();
                using (var scope = host.Services.CreateScope())
                {
                    try
                    {
                        var dbContext = scope.ServiceProvider.GetService<RoutineDbContext>();
                        dbContext.Database.EnsureDeleted();
                        dbContext.Database.Migrate();
                    }
                    catch (Exception e)
                    {
    
                        var logger = scope.ServiceProvider.GetRequiredService<ILogger<Program>>();
                        logger.LogError(e, "Database Migration Error!");
                    }
                }
                 host.Run();
            }

    7 添加迁移文件

    add-migration initial
  • 相关阅读:
    模拟两位选手进行n羽毛球比赛(15分赛制)并计算模拟胜率
    Pyton实例
    Python图片处理
    jieba库的使用和好玩的词云
    Python汉诺塔问题
    多线程同时操作一个epoll_fd
    Linux tr命令
    iptables 深入分析
    Linux xtables
    Linux IPC 共享内存
  • 原文地址:https://www.cnblogs.com/xiewenyu/p/13371263.html
Copyright © 2011-2022 走看看