Entity framework core 锁定表实体框架核心的最佳方法

Entity framework core 锁定表实体框架核心的最佳方法,entity-framework-core,Entity Framework Core,我目前正在做一个项目,制作一个在线票务网站。我有一张票表,其中包括所有已购买的票,链接到票类型和事件 我面临的问题是,如果一项赛事的门票分配量为500张,而我有多人试图购买门票,那么我如何停止在超出容量的情况下进行比赛 这是一个示例场景: 售出四百九十八张 用户1和用户2试图同时购买两张票: 用户1-现场检查可用门票498张已售出,2张可用 用户2-现场检查可用门票498张已售出,2张可用 用户1-为购买的票添加2行,500张已售出 用户2-为购买的票添加2行,502已售出 我知道我可以重新检查

我目前正在做一个项目,制作一个在线票务网站。我有一张票表,其中包括所有已购买的票,链接到票类型和事件

我面临的问题是,如果一项赛事的门票分配量为500张,而我有多人试图购买门票,那么我如何停止在超出容量的情况下进行比赛

这是一个示例场景:

售出四百九十八张

用户1和用户2试图同时购买两张票: 用户1-现场检查可用门票498张已售出,2张可用 用户2-现场检查可用门票498张已售出,2张可用 用户1-为购买的票添加2行,500张已售出 用户2-为购买的票添加2行,502已售出

我知道我可以重新检查已售出门票的数量,如果超过500张,就把票排出来。。。。但这听起来并不是一个优雅的解决方案

我正在使用entity framework core和.net core razor页面来开发该站点

提前感谢,


Matt

标准解决方案是使用,它会将桌子锁在引擎盖下,直到操作成功完成,或者回滚错误时所做的任何更改

从链接页面:

using (var context = new BloggingContext())
{
    using (var transaction = context.Database.BeginTransaction())
    {
        try
        {
            context.Blogs.Add(new Blog { Url = "http://blogs.msdn.com/dotnet" });
            context.SaveChanges();

            context.Blogs.Add(new Blog { Url = "http://blogs.msdn.com/visualstudio" });
            context.SaveChanges();

            var blogs = context.Blogs
                .OrderBy(b => b.Url)
                .ToList();

            // Commit transaction if all commands succeed, transaction will auto-rollback
            // when disposed if either commands fails
            transaction.Commit();
        }
        catch (Exception)
        {
            // TODO: Handle failure
        }
    }
}