【发布时间】:2021-07-30 23:29:42
【问题描述】:
我有 4 张桌子。
Table1 (primary)
Id
Table2 (foreign 1)
Id
Table1Id
Table3 (foreign 2)
Id
Table1Id
等等
Table1 也可以有没有 table2、3 和 4 的记录。
现在我们向这些表中添加了许多记录,我们的应用程序根据 Table1 中的 ID 进行提取以构建响应。
您通常会先在表 1 中添加记录,然后再在表 2 和 3 中添加记录等。
我们的问题是我们的轮询(每 30 秒运行一次)应用程序从 table1 中选择 Id,但无法从 Table2,3 和 4 中获取其链接记录,因为应用程序在链接记录保存在表 2,3 和 4 之前尝试获取在 table1 中保存记录后。
有没有办法防止这种情况发生?我们可以先保存外键记录吗?这样,应用程序不会在 table1 中看到记录,直到所有链接的记录都保存在 table2 和 3 中?这是一种常见且安全的做法吗?
任何建议都会很棒!
提前谢谢你
【问题讨论】:
-
标记您实际使用的 dbms 引擎,因为任何“解决方案”都可能在很大程度上取决于这一事实。从逻辑上讲,您应该在事务中插入父行和子行,这足以防止出现此问题。但我闻到了 nolock 的使用——或者“组”没有事务。
-
听起来您的保存过程需要使用事务(和 RCSI)。除了排除无效记录之外,您在选择方面无能为力
标签: sql-server entity-framework