【问题标题】:Implement transactions and concurrent access in EF 6.0在 EF 6.0 中实现事务和并发访问
【发布时间】:2015-08-20 04:26:11
【问题描述】:

我有一个使用 EF 6.0 连接到 MS SQL Server 数据库的工作 WPF 应用程序。我正在将此应用程序从独立移动到不同用户对应用程序具有不同权限的网络。有些只能生成报告(只读访问),有些将能够编辑/更新/删除数据,有些将能够从 excel 文件中导入数据(excel 文件中的大量数据)。所以我相信我需要在我的应用程序中管理事务,以便多个用户在访问相同的数据时,就不会出现并发问题。如何在此处管理事务和并发?

P.S:我在数据库中有一个角色和用户表。有一些预定义的角色,每个用户都有特定的角色,基于哪个用户可以控制对应用程序工作流的访问。

【问题讨论】:

  • 您的应用程序是在处理身份验证和授权(一个表或 3 个用于凭据)还是将这些推迟到数据库(每个用户都有单独的数据库登录)?

标签: c# sql-server wpf concurrency transactions


【解决方案1】:

并发请求,其中两个不同的用户尝试更新同一条数据(即数据库表中的一行)。我可以继续说一下,但我找到了decent article on asp.net

简短的版本是您需要在表格上有一个 rowversion 列。这是数据库在每次更新时自动递增的列。

您需要先在代码中或在 edmx 文件中使用属性将该列标识为时间戳列。 (rowversion 以前称为时间戳)

当并发冲突发生时,这将导致 SaveChanges 调用抛出 DbUpdateConcurrencyException

您可以抓住它并根据需要做出反应。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-30
    • 2012-10-22
    • 2012-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多