【问题标题】:Entity Framework 6 Racing Condition Insert/Update实体框架 6 赛车条件插入/更新
【发布时间】:2017-10-27 04:36:41
【问题描述】:

在 T-SQL 中,为了解决插入/更新竞争条件,使用WITH (UPDLOCK, SERIALIZABLE)。示例:两个会话线程试图在同一个主键上插入:

例子:

IF EXISTS(SELECT * 
          FROM dbo.Foo WITH (UPDLOCK, HOLDLOCK) 
          WHERE ID = @ID)

如何在最新版本的 C# ASP Entity Framework 6 EF6 中为 OLTP 环境应用这一点?在 EF6 中使用哪些关键字?

我宁愿引用 C# 类对象,而不是使用上面的内联 SQL。

谢谢,

【问题讨论】:

  • 那是2014年,希望实体框架6有这个机制
  • 不,永远不会。
  • 那很奇怪,那个想法是对象关系映射器的重点,要摆脱使用 sql 数据和使用 C# 对象,无论如何谢谢
  • 确实如此,这就是为什么 ORM 试图让用户远离锁定和事务的细节。换句话说:他们追求持久的无知。 ORM 将完成 OLTP 系统中 95% 的常规用户-数据库交互。使用底层数据存储的更高级功能总是需要专门的接口(如 TransactionScope 或 ADO.Net)。

标签: c# sql-server entity-framework


【解决方案1】:

通常,EF 使用客户端乐观并发控制。在这种情况下,这意味着您在用于检查是否存在的键上有一个主键或唯一索引,并将键违规错误与在初始检查中查找现有实体相同。

如果您希望很少有重复项,您也可以选择省略初始检查,而仅依靠密钥违规错误。

大卫

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-01
    • 1970-01-01
    • 2016-05-09
    • 1970-01-01
    • 2016-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多