首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySql.Data.MySqlClient.MySqlException:重复条目

MySql.Data.MySqlClient.MySqlException:重复条目
EN

Stack Overflow用户
提问于 2019-05-30 19:00:24
回答 1查看 2.4K关注 0票数 0

如何从这个自动脚手架中从.net标识代码获得重复的条目错误:

代码语言:javascript
复制
        public async Task<IActionResult> OnPostAsync(string returnUrl = null)
        {
            returnUrl = returnUrl ?? Url.Content("~/");
            if (ModelState.IsValid)
            {
                var user = new ApplicationUser {  UserName = Input.Email, Email = Input.Email };
                var result = await _userManager.CreateAsync(user, Input.Password);
                if (result.Succeeded)
                {
                    _logger.LogInformation("User created a new account with password.");

                    var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);
                    var callbackUrl = Url.Page(
                        "/Account/ConfirmEmail",
                        pageHandler: null,
                        values: new { userId = user.Id, code = code },
                        protocol: Request.Scheme);

                    await _emailSender.SendEmailAsync(Input.Email, "Confirm your email",
                        $"Please confirm your account by <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clicking here</a>.");

                    await _signInManager.SignInAsync(user, isPersistent: false);
                    return LocalRedirect(returnUrl);
                }
                foreach (var error in result.Errors)
                {
                    ModelState.AddModelError(string.Empty, error.Description);
                }
            }

            // If we got this far, something failed, redisplay form
            return Page();
        }

生成此堆栈跟踪:

Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware1执行请求时发生了未处理的异常。Microsoft.EntityFrameworkCore.DbUpdateException:更新条目时发生错误。有关详细信息,请参阅内部异常。对象状态)--从抛出异常的前一个位置开始的堆栈跟踪的结束--在System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot) --从在C:\projects\mysqlconnector\src\MySqlConnector\Core\ResultSet.cs:line 43中抛出异常的前一个位置的堆栈跟踪的结束--在C:\projects\mysqlconnector\src\MySqlConnector\Core\ResultSet.cs:line 43中--内部异常堆栈跟踪的结束--在MySql.Data.MySqlClient.MySqlDataReader。C:\projects\mysqlconnector\src\MySqlConnector\MySql.Data.MySqlClient\MySqlDataReader.cs:line 81 at MySql.Data.MySqlClient.MySqlDataReader.ReadFirstResultSetAsync(IOBehavior ioBehavior中的.ActivateResultSet(ResultSet resultSet) )在C:\projects\mysqlconnector\src\MySqlConnector\MySql.Data.MySqlClient\MySqlDataReader.cs:line 307 at MySql.Data.MySqlClient.MySqlDataReader.CreateAsync(MySqlCommand命令中,( C:\projects\mysqlconnector\src\MySqlConnector\MySql.Data.MySqlClient\MySqlDataReader.cs:line 292 at MySqlConnector.Core.TextCommandExecutor.ExecuteReaderAsync(String commandText,MySqlParameterCollection parameterCollection,CommandBehavior behavior,IOBehavior ioBehavior,CancellationToken cancellationToken)中的CommandBehavior行为,ResultSetProtocol resultSetProtocol,IOBehavior ioBehavior),在C:\projects\mysqlconnector\src\MySqlConnector\Core\TextCommandExecutor.cs:line 37中的Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.ExecuteAsync(IRelationalConnection连接中,cancellationToken CommandBehavior,en19#2参数,Pomelo.EntityFrameworkCore.MySql.Storage.Internal.MySqlExecutionStrategy.ExecuteAsyncTState,TResult at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChangesAsync(IReadOnlyList1 entriesToSave, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChangesAsync(Boolean acceptAllChangesOnSuccess, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.DbContext.SaveChangesAsync(Boolean acceptAllChangesOnSuccess, CancellationToken cancellationToken) at Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserStore9.CreateAsync(TUser user,CancellationToken CancellationToken at Chuchubi.Data.MultiTenant.TenantUserStore.CreateAsync(ApplicationUser user,CancellationToken cancellationToken( C:\Users\Dropbox\Code\chuchubi-backend\Chuchubi.Data\MultiTenant\TenantUserStore.cs:line 30 at Microsoft.AspNetCore.Identity.UserManager1.CreateAsync(TUser user) at Microsoft.AspNetCore.Identity.UserManager1.CreateAsync(TUser user),(字符串密码)(在Chuchubi.Areas.Identity.Pages.Account.RegisterModel.OnPostAsync(String returnUrl)在C:\Users\Dropbox\Code\chuchubi-backend\Chuchubi\Areas\Identity\Pages\Account\Register.cshtml.cs:line 71中Microsoft.AspNetCore.Mvc.RazorPages.Internal.ExecutorFactory.GenericTaskHandlerMethod.ConvertT在Microsoft.AspNetCore.Mvc.RazorPages.Internal.ExecutorFactory.GenericTaskHandlerMethod.Execute(Object接收器,( Microsoft.AspNetCore.Mvc.RazorPages.Internal.PageActionInvoker.InvokeHandlerMethodAsync() at Microsoft.AspNetCore.Mvc.RazorPages.Internal.PageActionInvoker.InvokeNextPageFilterAsync() at Microsoft.AspNetCore.Mvc.RazorPages.Internal.PageActionInvoker.Rethrow(PageHandlerExecutedContext context)在Microsoft.AspNetCore.Mvc.RazorPages.Internal.PageActionInvoker.Next(State& next,范围和作用域,对象和状态,( Microsoft.AspNetCore.Mvc.RazorPages.Internal.PageActionInvoker.InvokeInnerFilterAsync() at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextResourceFilter() at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResourceExecutedContext context)在Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Next(State& next,范围和作用域,对象和状态,( Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeFilterPipelineAsync() at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeAsync() at Microsoft.AspNetCore.Builder.RouterMiddleware.Invoke(HttpContext httpContext) ( Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke(HttpContext context) ( Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context) ( SaasKit.Multitenancy.Internal.TenantResolutionMiddleware1.Invoke(HttpContext context, ITenantResolver1 tenantResolver) ( Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke(HttpContext context ))(在Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.MigrationsEndPointMiddleware.Invoke(HttpContext上下文( Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.DatabaseErrorPageMiddleware.Invoke(HttpContext httpContext) at Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.DatabaseErrorPageMiddleware.Invoke(HttpContext httpContext( at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)信息: Microsoft.AspNetCore.Hosting.Internal.WebHost2

这是来自visual自动生成的代码。

编辑:

MySql版本详细信息:

代码语言:javascript
复制
'immediate_server_version', '999999'
'innodb_version', '8.0.16'
'original_server_version', '999999'
'protocol_version', '10'
'slave_type_conversions', ''
'tls_version', 'TLSv1,TLSv1.1,TLSv1.2'
'version', '8.0.16'
'version_comment', 'MySQL Community Server - GPL'
'version_compile_machine', 'x86_64'
'version_compile_os', 'Win64'
'version_compile_zlib', '1.2.11'

我的首席执行官:

代码语言:javascript
复制
    <PackageReference Include="Microsoft.AspNetCore.App" />
    <PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.2.0" PrivateAssets="All" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="2.2.4" />
    <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.2.3" />
    <PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="2.2.0" />
    <PackageReference Include="Pomelo.EntityFrameworkCore.MySql.Design" Version="1.1.2" />
    <PackageReference Include="SaasKit.Multitenancy" Version="1.1.4" />

这是在一个空数据库上完成的,在错误发生后,数据库中没有用户被插入!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-31 18:36:10

好的,试图在一个干净的项目中复制这一点,我设法弄清楚了。因此,应用程序是多租户的,每个身份用户都与租户有一对一的关系。

使用SaasKit I将数据库模型租户缓存到内存中,同时创建如下所示的新用户:

代码语言:javascript
复制
IdentityUser.Tenant = cachedTenant;
DbContext.SaveChanges();

Entityframework将租户视为一个新的租户(未被跟踪),从而导致重复消息。

所以重复的消息实际上是给新租户的。

通过缓存“视图模型”而不是数据库模型来修正。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56384155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档