我正在构建一个 ASP Web API 项目,使用 SQL Server 进行存储,并使用实体框架连接到它。
存储中的几个表包含唯一约束以强制它们中的值的唯一性。在向这些表添加值之前,我的应用程序会检查以确保这些值不存在。
构建应用程序时,每个请求都存在一个 DbContext。但是,我想到两个请求可能会尝试将相同的值插入表中。请求 A 将检查表中是否存在该值,请求 B 也是如此。两者都确定该值需要添加,并将其添加到 DbSet。当调用 SaveChanges 时,一个请求会成功,一个请求会因为唯一约束失败而失败。
Entity Framework 如何解决这些问题?我计划创建存储过程来检索或创建值,我认为应该解决它(保证原子性的存储过程),但我会更热衷于仅使用实体框架本身解决这个问题的方法。我想我喜欢排队加载仅在调用 DbContext.SaveChanges() 时执行的操作的想法,但显然存储过程解决方案意味着数据库交互将在 SaveChanges() 之前发生。