Entity framework core 锁定表实体框架核心的最佳方法
我目前正在做一个项目,制作一个在线票务网站。我有一张票表,其中包括所有已购买的票,链接到票类型和事件 我面临的问题是,如果一项赛事的门票分配量为500张,而我有多人试图购买门票,那么我如何停止在超出容量的情况下进行比赛 这是一个示例场景: 售出四百九十八张 用户1和用户2试图同时购买两张票: 用户1-现场检查可用门票498张已售出,2张可用 用户2-现场检查可用门票498张已售出,2张可用 用户1-为购买的票添加2行,500张已售出 用户2-为购买的票添加2行,502已售出 我知道我可以重新检查已售出门票的数量,如果超过500张,就把票排出来。。。。但这听起来并不是一个优雅的解决方案 我正在使用entity framework core和.net core razor页面来开发该站点 提前感谢,Entity framework core 锁定表实体框架核心的最佳方法,entity-framework-core,Entity Framework Core,我目前正在做一个项目,制作一个在线票务网站。我有一张票表,其中包括所有已购买的票,链接到票类型和事件 我面临的问题是,如果一项赛事的门票分配量为500张,而我有多人试图购买门票,那么我如何停止在超出容量的情况下进行比赛 这是一个示例场景: 售出四百九十八张 用户1和用户2试图同时购买两张票: 用户1-现场检查可用门票498张已售出,2张可用 用户2-现场检查可用门票498张已售出,2张可用 用户1-为购买的票添加2行,500张已售出 用户2-为购买的票添加2行,502已售出 我知道我可以重新检查
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
}
}
}