(更新时间)2021年5月28日 商城高并发秒杀系统(.NET Core版) 03-微服务架构设计

举报
愚公搬代码 发表于 2021/10/19 01:05:47 2021/10/19
【摘要】 一:数据库使用 首先安装包:Microsoft.EntityFrameworkCore.Design .NET Core代码配置 /// <summary> /// 订单服务上下文 ///...

一:数据库使用

首先安装包:Microsoft.EntityFrameworkCore.Design
.NET Core代码配置

/// <summary>
/// 订单服务上下文
/// </summary>
public class OrderContext : DbContext
{
    public OrderContext(DbContextOptions<OrderContext> options) : base(options)
    {

    }

    /// <summary>
    /// 订单集合
    /// </summary>
    public DbSet<Order> Orders { get; set; }

    /// <summary>
    ///  订单项集合
    /// </summary>
    public DbSet<OrderItem> OrderItems { set; get; }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
// 1、IOC容器中注入dbcontext
services.AddDbContext<OrderContext>(optionsBuilder =>
{
    optionsBuilder.UseMySQL(Configuration.GetConnectionString("DefaultConnection"));
});
// 2、注册用户service
services.AddScoped<IOrderService, OrderServiceImpl>();
services.AddScoped<IOrderItemService, OrderItemServiceImpl>();

// 3、注册用户仓储
services.AddScoped<IOrderRepository, OrderRepository>();
services.AddScoped<IOrderItemRepository, OrderItemRepository>();

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

数据库迁移:
1 程序包管理器控制台 , Package Manager Console(PMC)

如果你用visual studio 开发建议使用PMC迁移方式,该方式是同时支持efcore和原先的ef 迁移的

2 命令行工具 ,Command line interface (CLI)

该方式适用于跨平台开发的时候进行迁移数据库的,也就是可脱离visual studio,比如你用vs code,或直接打开cmd控制台进行操作

1.下面先列出两种方式对比,然后再分用vs 和vscode分别详细说明

迁移命令描述 CLI命令 PMC命令
创建迁移:migrationname为迁移名称 dotnet ef migrations add migrationName add-migration migrationName
移除迁移(删除最近的一次迁移) dotnet ef migrations remove remove-migration
应用所有的迁移(使迁移文件应用到数据库) dotnet ef database update update-database
指定版本进行迁移 dotnet ef database update migrationName update-database migrationName
生成对应版本的脚本 dotnet ef migrations script Script-Migration
查看迁移列表 dotnet ef migrations list
查看数据库上下文信息 dotnet ef dbcontext info

二:微服务架构设计

以订单微服务为例

  • model模型层
/// <summary>
/// 订单模型
/// </summary>
public class Order
{
    [Key]
    public int Id { set; get; } // 主键
    public string OrderType { set; get; } // 订单类型
   // public string OrderFlag { set; get; } // 订单标志
    public int UserId { set; get; } // 用户Id
    public string OrderSn { set; get; }// 订单号
    public string OrderTotalPrice { set; get; } // 订单总价
    public DateTime Createtime { set; get; } // 创建时间
    public DateTime Updatetime { set; get; } // 更新时间
    public DateTime Paytime { set; get; }// 支付时间
    public DateTime Sendtime { set; get; }// 发货时间
    public DateTime Successtime { set; get; }// 订单完成时间
    public int OrderStatus { set; get; } // 订单状态
    public string OrderName { set; get; } // 订单名称
    public string OrderTel { set; get; } // 订单电话
    public string OrderAddress { set; get; } // 订单地址
    public string OrderRemark { set; get; }// 订单备注

    // 订单项
    public List<OrderItem> OrderItems { set; get; }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • Service服务层
/// <summary>
/// 订单服务实现
/// </summary>
public class OrderServiceImpl : IOrderService
{
    public readonly IOrderRepository OrderRepository;

    public OrderServiceImpl(IOrderRepository OrderRepository)
    {
        this.OrderRepository = OrderRepository;
    }

    public void Create(Order Order)
    {
        OrderRepository.Create(Order);
    }

    public void Delete(Order Order)
    {
        OrderRepository.Delete(Order);
    }

    public Order GetOrderById(int id)
    {
        return OrderRepository.GetOrderById(id);
    }

    public IEnumerable<Order> GetOrders()
    {
        return OrderRepository.GetOrders();
    }

    public void Update(Order Order)
    {
        OrderRepository.Update(Order);
    }

    public bool OrderExists(int id)
    {
        return OrderRepository.OrderExists(id);
    }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • Repository仓储层
/// <summary>
/// 订单仓储实现
/// </summary>
public class OrderRepository : IOrderRepository
{
    public OrderContext OrderContext;
    public OrderRepository(OrderContext OrderContext)
    {
        this.OrderContext = OrderContext;
    }
    public void Create(Order Order)
    {
        OrderContext.Orders.Add(Order);
        OrderContext.SaveChanges();
    }

    public void Delete(Order Order)
    {
        OrderContext.Orders.Remove(Order);
        OrderContext.SaveChanges();
    }

    public Order GetOrderById(int id)
    {
        return OrderContext.Orders.Find(id);
    }

    public IEnumerable<Order> GetOrders()
    {
        return OrderContext.Orders.ToList();
    }

    public void Update(Order Order)
    {
        OrderContext.Orders.Update(Order);
        OrderContext.SaveChanges();
    }
    public bool OrderExists(int id)
    {
        return OrderContext.Orders.Any(e => e.Id == id);
    }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

文章来源: codeboy.blog.csdn.net,作者:愚公搬代码,版权归原作者所有,如需转载,请联系作者。

原文链接:codeboy.blog.csdn.net/article/details/117370531

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。