首页 > 其他分享 >chatGPT帮助开发实战解答问题和反思

chatGPT帮助开发实战解答问题和反思

时间:2023-02-23 13:00:40浏览次数:37  
标签:Version 版本号 Orders 单据 context 反思 chatGPT public 解答

 

问题来自.Net开发群友

 

问题

我想做一个自动生成单据号的功能,但是在EFCORE里没有行级锁,请有什么等价方案吗?

 

ChatGPT回答

在 EF Core 中确实没有提供行级锁(row-level locking)的功能,因为这需要对数据库进行显式的锁定操作,而 EF Core 的设计理念是尽可能不与数据库直接交互,而是通过抽象层面的数据操作来实现,因此不鼓励使用显式的锁定操作。

不过,在 EF Core 中提供了乐观并发控制(Optimistic Concurrency Control)的功能,可以用于处理类似于行级锁的需求。乐观并发控制基于版本号(Version)机制实现,每个实体对象都有一个版本号属性,当两个用户同时更新同一个实体对象时,EF Core 会比较它们的版本号,如果版本号不一致,则表示有冲突发生,需要执行相应的冲突解决逻辑。

因此,如果你想实现自动生成单据号的功能,并保证其唯一性,可以考虑使用乐观并发控制的方案。具体的实现思路如下:

  1. 在你的实体对象中增加一个版本号属性,类型为整数。

  2. 在生成单据号前,使用 EF Core 查询最后一条记录的单据号和版本号,得到最新的单据号和版本号。

  3. 在生成单据号时,将版本号加 1,并将单据号和版本号写入到新的记录中。如果写入数据库时发生冲突,则表示有其他用户同时在生成单据号,此时可以重新获取最新的单据号和版本号,并再次尝试生成。

以下是一个简单的示例代码,演示了如何使用乐观并发控制来生成唯一的单据号

public class Order
{
    public int Id { get; set; }
    public string OrderNo { get; set; }
    public int Version { get; set; }
}

public class OrderContext : DbContext
{
    public DbSet<Order> Orders { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Order>()
            .Property(o => o.Version)
            .IsConcurrencyToken();
    }
}

public class OrderService
{
    private readonly OrderContext _context;

    public OrderService(OrderContext context)
    {
        _context = context;
    }

    public string GenerateOrderNo()
    {
        string lastOrderNo = _context.Orders
            .OrderByDescending(o => o.Id)
            .Select(o => o.OrderNo)
            .FirstOrDefault();

        int lastVersion = _context.Orders
            .OrderByDescending(o => o.Id)
            .Select(o => o.Version)
            .FirstOrDefault();

        string newOrderNo = GenerateNewOrderNo(lastOrderNo);

        var order = new Order
        {
            OrderNo = newOrderNo,
            Version = lastVersion + 1
        };

        _context.Orders.Add(order);

        try
        {
            _context.SaveChanges();
        }
        catch (DbUpdateConcurrencyException ex)
        {
            // 处理并发冲突
            ex.Entries.Single().Reload();
            lastOrderNo = _context.Orders
                .OrderByDescending(o => o.Id)
                .Select(o=> o.OrderNo) .FirstOrDefault(); lastVersion = _context.Orders .OrderByDescending(o => o.Id) .Select(o => o.Version) .FirstOrDefault(); newOrderNo = GenerateNewOrderNo(lastOrderNo); order.OrderNo = newOrderNo; order.Version = lastVersion + 1; _context.SaveChanges(); } return newOrderNo; } private string GenerateNewOrderNo(string lastOrderNo) { // 生成新的单据号逻辑 // ... }
}

 

反思

EFCORE 和 行级锁,如果提问者不知道这两者的含义根本没法问,就算问了,回答的东西,所以chatGPT对提问者也是有要求的

再没有chatGPT以前,我们码农如果遇到这个问题如何解决了?

很简单,使用各种搜索引擎,或者询问同行,搜集零碎的信息然后最终拼凑起来

程序员在有了chatGPT之后,有什么变化?

显而易见,缩短了搜索的时间

总结

其实不管是以前的面向搜索引擎编程,还是面向群友编程,其实都在暗中隐喻了程序员的未来——架构师

开发软件应用,最终是为了人类某个行业提供多一种可选方式

(例如外卖,古代也有外卖,让店小二提餐走路送去大户人家家里

  后来有了马车,单车,直到现在的摩托车,什么变了?方式变了,最终目的并没有改变

做开发其实也是一个道理,我们并不是做一个XX软件去替代,而是为了原本的最终目的提供多一种方式,而程序员则是这多出来的一种方式的设计师,让这个新的方式更加的容易被大众接纳和方便使用

要不然,我原本方式很简单,为什么要用你给我提供的方式呢?近些年开发行业也经常出现这种本末倒置的情况,很多码农都不知道自己开发这些软件应用的目的到底是为什么,对于我们开发者而言

不管什么技术,只是为了达成最终目的的手段,而不是最终目的

 

这也是我实在不喜欢背诵一些照本宣科的书面理论知识,而是更热衷提出和发现程序的到设计思路

说了这么多只是想说,程序员的未来肯定会是架构师,我们所有的技术积累我个人看来只是为了让我们的思维从普通人转换成程序员思维,而且我相信在未来,编程思维会如同吃饭一样,成为每个人的必备

 

标签:Version,版本号,Orders,单据,context,反思,chatGPT,public,解答
From: https://www.cnblogs.com/ncellit/p/17147559.html

相关文章

  • ChatGPT月嫂级安装教程(亲测有效)
    您好,我是湘王,这是我的51CTO博客,欢迎您来,欢迎您再来~现在ChatGPT国内注册不了,需要外网的环境,而且要外网的手机号做验证。网上给的「执行脚本」方法既没效又不靠谱(难道每次要用......
  • AIGC行业深度报告:ChatGPT重新定义搜索“入口”
    原创/文BFT机器人核心观点ChatGPT,有望重新定义搜索”入口”。本文认为ChatGPT是实现“模糊搜索”到“精准推送”的跨时代巅峰之作,复盘Chrome与IE浏览器之争,Chrome获胜关键......
  • 科技“新贵”ChatGPT缘何“昙花一现”,仅低代码风靡至今
    恍惚之间,ChatGPT红遍全网,元宇宙沉入深海……在科技圈,见证了太多“昙花一现”,“新贵”ChatGPT的爆火几乎复制了元宇宙的路径,它会步元宇宙的后尘,成为下一个沉入深海的工具吗......
  • OpenAI官方的GPT-3接口,chatgpt机器人免费体验版,秘钥APPKEY
    OpenAI官方的GPT-3接口,chatgpt机器人免费体验版,秘钥APPKEY。长按或扫一扫二维码,进入与chatGPT人工智能机器人对聊,注册用户后免费获得对话次数,也可以加客服免费获取秘钥App......
  • chatgpt教你写代码
    问题:    本人是个菜鸟,想将HTID字段和LDaiHao字段相同,且个数大于1的记录的Feature字段值改为“共压”​ ​编辑     于是我凭着自己粗浅的学识,写了......
  • uniapp对接ChatGPT 简单实现对话功能
    最近很火的ChatGPT来了!我也是做了一个最最基础的模型,让大家更通俗易懂!先看效果:    接下来直接上代码:<template> <viewclass="content"> <viewclass="tex......
  • 用Python实现ChatGPT智能机器人
    最近,ChatGPT突然大火,说是十分的智能,可以写诗,写报告,甚至写论文,报着试试看的态度,我也研究了一下,找了很多资料,写了一个智能机器人的小demo。 因为ChatGPT依赖于OpenAI,所以,......
  • 有趣的数据_ChatGPT的多语种训练数据集
    为什么建议用英语和ChatGPT沟通为什么chatGPT中文对话时候偶尔会感觉到他在胡编瞎造为什么chatGPT中文提问专业问题时偶尔会出现英语回复​看openai公布的GPT-3训练数据集的......
  • 关于目前chatGPT写代码问题,随手测试了一下
    他们都说chatGPT写代码很厉害,我就随手一测,其实源码本身不太重要,我就不上源码了:  (源码:略)  (源码:略)  (源码:略)  (源码:略)  (源码:略)  (源码:略)到最终,其......
  • 微信公众号-chatgpt客服
    想体验的可以去微信上搜索【旅行的树】公众号,也可以扫描当前二维码体验。一、ChatGPT注册1.1短信手机号申请openai提供服务的区域,美国最好,这个解决办法是搞个FQ,或者买......