首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >锁定表实体框架核心的最佳方法

锁定表实体框架核心的最佳方法
EN

Stack Overflow用户
提问于 2020-02-10 23:56:06
回答 1查看 570关注 0票数 1

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

我面临的问题是,如果一个活动分配了500张门票,而我有多个人试图购买门票,我如何停止超售的比赛条件。

这是一个示例场景:

售出498张门票

用户1和用户2分别尝试同时购买两张票:用户1-站点检查可用票498售出,2可用用户2-站点检查可用票498售出,2可用用户1-为已购票添加2行,500已售出用户2-为已购票添加2行,502已售出

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

我正在使用实体框架核心与.net核心剃刀页面来开发网站。

提前谢谢你,

哑光

EN

回答 1

Stack Overflow用户

发布于 2020-03-29 05:50:20

标准的解决方案是使用transactions,它将在幕后锁定表,直到操作成功完成,或者回滚出错时所做的任何更改。

在链接的页面中:

代码语言:javascript
复制
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
        }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60153976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档