当前位置: 首页 > 知识库问答 >
问题:

如何同步使用UserManager?[副本]

成和悌
2023-03-14

seed方法中的一个IDatabaseInitializer中,给定我的dbcontext,我将初始数据插入到DB中。除其他外,还有一些用户需要初始化。但是我将Microsoft.aspnet.identity.EntityFramework.UserStoreMicrosoft.aspnet.identity.UserManager一起使用,DBUPDateConcurrencyException,后者只有异步方法,如下所示:

private static void CreateUser(DbContext context, string[] roles, string userName, string userEmail) {

    // given context is 
    var user = new ApplicationUser { /* ... fields init */  };

    var userStoreAdapter = new ApplicationUserRepository(context);
    var manager = new UserManager<ApplicationUser>(userStoreAdapter);

    // pass the creation to manager by calling it synchronously. See UserManagerExtensions
    manager.Create(user, Domain.Constants.DefaultPassword);
    manager.AddToRoles(user.Id, roles);

    context.SaveChanges(); // throws DbUpdateConcurrencyException. See another approach below.
}

所以问题是,是否有一种方法可以将UserManagerdbcontext一起使用而不会出现并发问题?

我尝试了从乐观并发模式中获得的以下方法,但它不会创建用户:

bool isSaved = true;
do
{
    try
    {
        context.SaveChanges();
        isSaved = true;
    }
    catch (DbUpdateConcurrencyException ex)
    {
        foreach (var entry in ex.Entries)
        {
            entry.Reload();
        }
        isSaved = false;
    }
} while (!isSaved);

共有1个答案

闾丘博超
2023-03-14
var result = Task.Run(() => {
   /*whatever you want here*/
}).Result;

// Do whatever u want with the result after
 类似资料:
  • 我正在为一家德国公司评估Dart,将各种Java程序移植到Dart,并对结果进行比较和分析。在浏览器中,飞镖轻松获胜。对于服务器来说,软件性能似乎是一个严重的问题(请看我的这个问题),但这基本上得到了缓解。 现在我正在移植一些“简单”的命令行工具,我没想到会有任何严重的问题,但至少有一个问题。一些工具确实会发出HTTP请求来收集一些数据,独立的Dart虚拟机只以异步方式支持它们。纵观所有我能找到的

  • volley库如何在Android中同步工作?我想当volley从服务器得到响应的时候,程序的执行停止并等待volley的结果。

  • 我的项目即将启动。在发布之后,我有一个很大的计划,数据库结构将发生变化——现有表和新表中的新列,以及与现有模型和新模型的新关联。 我还没有接触到序列化中的迁移,因为我只有测试数据,我不介意每次数据库更改时都删除这些数据。 为此,目前,如果我更改了模型定义,我会在我的应用程序启动时运行。这将删除所有表并从头开始创建它们。我可以省略选项,让它只创建新表。但如果现有的改变了,这是没有用的。 那么,一旦我

  • 我有多个线程,它们都从一个对象运行。我希望“主线程”单独运行,直到某一点,然后它等待,所有其他线程一起运行,然后主线程唤醒,等等。。。。。我无法同步线程。我要么得到一个非法的监视器状态异常,要么它卡在一个“等待”循环中,该循环应该接收一个永远不会到达的“通知”。 更具体地说,我有一个带有数组的对象。阵列中的每个单元都有一个线程,该线程检查相邻单元,然后使用该信息更改其单元。为了有序地进行更改,我希

  • 在过去,我们被明确警告调用是异步的,并且的值在回调或下一个方法之前无效。 使用useState,在显式更新状态后如何获取状态值? 钩子是如何工作的?据我所知,的setter函数不接受回调,例如。 不会导致正在运行回调。 我在旧世界的另一个解决方法是在类上挂起一个实例变量,但这在这里不起作用,因为没有可重用的函数实例(在严格模式下没有)。

  • RestTemplate文档中的Spring注意: 注意:从5.0开始,这个类处于维护模式,只接受微小的更改请求和bug。请考虑使用org.springframework.web.reactive.client.WebClient,它具有更现代的API,支持同步、异步和流场景。 https://docs.spring.io/spring-framework/docs/current/javadoc