在EF Core和ASP.NET Core中处理并发的最佳实践?

伊万·马克·德博诺

当前,在插入/更新和实体时,我正在执行以下操作:

public async Task<IdentityResult> UpdateAsync(Model model, CancellationToken ct = default)
{
    var entity = await GetAsync(ct);
    if (entity == null)
    {
        return await CreateAsync(model, ct);
    }
    context.Entry(entity).State = EntityState.Detached;

    Update(model);
    model.ConcurrencyToken = Guid.NewGuid().ToString();

    await context.SaveChangesAsync();
    return IdentityResult.Success;
}

以及更新方法:

protected virtual T Update(T entity)
{
    var dbEntityEntry = context.Entry(entity);
    if (dbEntityEntry.State == EntityState.Detached)
    {
        dbSet.Attach(entity);
        dbEntityEntry.State = EntityState.Modified;
    }

    return entity;
}

可以了 但是,有没有更好的(通用)方法来处理并发呢?

CodeNotFound

是的,在EF Core中有一种通用的并发管理方法。您已经通过添加一列来完成第一部分,该列将管理每次更新的行版本,但是您正在手动更新并发令牌。

最好的方法是让DB使用来自动为您更新并发令牌TimestampEF Core文档中所述

时间戳/行转换是一种属性,每次插入或更新行时,数据库都会自动为其生成新值。该属性也被视为并发令牌,以确保如果自查询以来要更新的行已更改,您将获得异常。确切的细节取决于所使用的数据库提供程序;对于SQL Server,通常使用byte []属性,该属性将设置为数据库中的ROWVERSION列。

使用方法(来自EF Core文档的示例):

public class Blog
{
    public int BlogId { get; set; }

    public string Url { get; set; }

    [Timestamp]
    public byte[] Timestamp { get; set; }
}

因此,不必更新TimestamporConcurrencyToken列,因为它将由数据库为您完成。

最后一部分是确保正确处理并发冲突,并让用户知道他/她已经过时。如何管理并发冲突(它们引发异常)。您可以按照此处的说明进行操作

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ASP.NET Core MVC 和 EF Core 1.1

来自分类Dev

ASP net Core Razor Pages - EF 和视图的拆分模型

来自分类Dev

带有ASP.NET Core 3.0和EF Core的多租户应用程序

来自分类Dev

具有EF Core迁移和IHttpContextAccessor的ASP.NET Core(3.1)

来自分类Dev

带有EF Core和CosmosDB的ASP.Net Core-IdentityRole问题

来自分类Dev

ASP.NET Core 和 EF Core 1.1 - 使用存储过程显示数据

来自分类Dev

在ASP.NET Core WebApplicationFactory中重写EF Core DbContext

来自分类Dev

ASP.NET 和 EF Core Web API 为对象中的对象返回 null

来自分类Dev

使用 EF Core Code First 和 IdentityUser 的 .Net Core API

来自分类Dev

我可以安全地在ASP.NET Core和EF Core中使用非泛型DbContextOptions吗?

来自分类Dev

如何在asp.net core和ef7中的并行方法中使用注入的DbContext?

来自分类Dev

.NET Core设置-最佳实践

来自分类Dev

ASP.NET Core EF 未找到导航属性

来自分类Dev

.NET / EF Core中的批量插入优化

来自分类Dev

.net core时EF和Entity-SQL之间的区别

来自分类Dev

在 ef core 2 中处理连接的最佳方法是什么

来自分类Dev

在ASP.NET Core中使用FV和EF时获取“无法访问已处置的对象”

来自分类Dev

在ASP.NET Core中使用FV和EF时获取“无法访问已处置的对象”

来自分类Dev

Asp.Net Core中的EF Core异步可伸缩性

来自分类Dev

无法使用 EF Core 在 ASP.NET Core 中创建相关实体

来自分类Dev

在没有 EF Core 参考的 ASP.NET 项目中使用 EF 存储?

来自分类Dev

在ASP.NET Core API中返回计算数据的最佳实践

来自分类Dev

EF Core和Azure

来自分类Dev

Net Core Worker Windows服务中的EF Core DBContext

来自分类Dev

.NET Core EF core中对dbcontext的并行调用

来自分类Dev

如何通过ASP.NET Core 3.1 MVC和EF Core对唯一字段使用数据验证注释?

来自分类Dev

ASP.Net Core / EF Core:添加迁移后,身份用户类和自定义类之间存在多对多关系,堆栈溢出

来自分类Dev

如何通过ASP.NET Core 3.1 MVC和EF Core对唯一字段使用数据验证注释?

来自分类Dev

EF 7 .NET Core工具错误

Related 相关文章

  1. 1

    ASP.NET Core MVC 和 EF Core 1.1

  2. 2

    ASP net Core Razor Pages - EF 和视图的拆分模型

  3. 3

    带有ASP.NET Core 3.0和EF Core的多租户应用程序

  4. 4

    具有EF Core迁移和IHttpContextAccessor的ASP.NET Core(3.1)

  5. 5

    带有EF Core和CosmosDB的ASP.Net Core-IdentityRole问题

  6. 6

    ASP.NET Core 和 EF Core 1.1 - 使用存储过程显示数据

  7. 7

    在ASP.NET Core WebApplicationFactory中重写EF Core DbContext

  8. 8

    ASP.NET 和 EF Core Web API 为对象中的对象返回 null

  9. 9

    使用 EF Core Code First 和 IdentityUser 的 .Net Core API

  10. 10

    我可以安全地在ASP.NET Core和EF Core中使用非泛型DbContextOptions吗?

  11. 11

    如何在asp.net core和ef7中的并行方法中使用注入的DbContext?

  12. 12

    .NET Core设置-最佳实践

  13. 13

    ASP.NET Core EF 未找到导航属性

  14. 14

    .NET / EF Core中的批量插入优化

  15. 15

    .net core时EF和Entity-SQL之间的区别

  16. 16

    在 ef core 2 中处理连接的最佳方法是什么

  17. 17

    在ASP.NET Core中使用FV和EF时获取“无法访问已处置的对象”

  18. 18

    在ASP.NET Core中使用FV和EF时获取“无法访问已处置的对象”

  19. 19

    Asp.Net Core中的EF Core异步可伸缩性

  20. 20

    无法使用 EF Core 在 ASP.NET Core 中创建相关实体

  21. 21

    在没有 EF Core 参考的 ASP.NET 项目中使用 EF 存储?

  22. 22

    在ASP.NET Core API中返回计算数据的最佳实践

  23. 23

    EF Core和Azure

  24. 24

    Net Core Worker Windows服务中的EF Core DBContext

  25. 25

    .NET Core EF core中对dbcontext的并行调用

  26. 26

    如何通过ASP.NET Core 3.1 MVC和EF Core对唯一字段使用数据验证注释?

  27. 27

    ASP.Net Core / EF Core:添加迁移后,身份用户类和自定义类之间存在多对多关系,堆栈溢出

  28. 28

    如何通过ASP.NET Core 3.1 MVC和EF Core对唯一字段使用数据验证注释?

  29. 29

    EF 7 .NET Core工具错误

热门标签

归档