asp.net-mvc – 当多个用户创建用户时,修改了automapper错误集合
我收到以下错误,只有当多个用户点击同一个按钮时才会出现此错误.任何帮助/想法将非常感激:
这是构造函数,我认为aftermap是问题,但在调试时我没有收到错误. Public Sub New(environmentCode As String,applicationCode As String) MyBase.New(environmentCode,applicationCode) SOBaseUrl = System.Configuration.ConfigurationManager.AppSettings(Enums.AppSettingKeys.SOBaseUrl.ToString()) If Not String.IsNullOrEmpty(SOBaseUrl) Then SOBaseUrl = SOBaseUrl.TrimEnd("/") End If 'Setup mapping. Mapper.CreateMap(Of Service.User,Models.User)() _ .ForMember(Function(dest As Models.User) dest.ENumber,Sub(opt) opt.MapFrom(Function(src As Service.User) src.INumber)) _ .AfterMap(Sub(src As Service.User,dest As Models.User) dest.Groups = New List(Of String) Using service = ApplicationSecurityManager.Service.Factory.GetService() Dim applicationPermissions = service.LoadPermissionsForUser(dest.Username,MyBase.EnvironmentCode) If (Not applicationPermissions Is Nothing AndAlso applicationPermissions.Any(Function(x) x.Code = MyBase.ApplicationCode)) Then dest.Groups = applicationPermissions.Single(Function(x) x.Code = MyBase.ApplicationCode).GroupNames.ToList() End If End Using End Sub) Depenendency Injection Mapping: container.RegisterType(Of IUserManager,UserManager)(New PerThreadLifetimeManager(),New InjectionConstructor( ConfigurationManager.AppSettings(Common.Enums.AppSettingKeys.Environment.ToString()),ConfigurationManager.AppSettings(Common.Enums.AppSettingKeys.ApplicationCode.ToString())) ) 在saveUserResponse中,错误被抛出. Public Function Create(user As Common.Models.User,approve As Boolean) As SO.Common.Models.User Implements IUserProvider.Save Dim saveUserResponse = UserManager.SaveUser(Mapper.Map(Of ApplicationSecurityManager.Service.User)(user)) If Not String.IsNullOrEmpty(saveUserResponse.ErrorMessage) Then 'The Security system returned an error. Throw New Exception("Security Service returned error: " & saveUserResponse.ErrorMessage) End If 'Return the username. Return Mapper.Map(Of Common.Models.User)(saveUserResponse.User) End Function 解决方法
当多个用户在映射的AfterMap()方法中修改相同的user.Groups集合时,会导致这种情况.要避免这种情况,请锁定正在处理集合的代码.例如:
'class level object private object _myLock = New object() 'Setup mapping. Mapper.CreateMap(Of Service.User,Models.User)() _ .ForMember(Function(dest As Models.User) dest.ENumber,Sub(opt) opt.MapFrom(Function(src As Service.User) src.INumber)) _ .AfterMap(Sub(src As Service.User,dest As Models.User) SyncLock _myLock dest.Groups = New List(Of String) Using service = ApplicationSecurityManager.Service.Factory.GetService() Dim applicationPermissions = service.LoadPermissionsForUser(dest.Username,MyBase.EnvironmentCode) If (Not applicationPermissions Is Nothing AndAlso applicationPermissions.Any(Function(x) x.Code = MyBase.ApplicationCode)) Then dest.Groups = applicationPermissions.Single(Function(x) x.Code = MyBase.ApplicationCode).GroupNames.ToList() End If End Using End SyncLock End Sub) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 五幅图演示ASP.NET编译过程
- asp.net-mvc – 如何使用Autotyper和Betty方法将DataAnnota
- EXCEL文件导入时报_未在本地计算机上注册Microsoft.ACE.OLE
- asp.net-mvc – 如何访问querystring在ASP.Net MVC视图
- asp.net-mvc – AspNet如何与我的模型识别
- asp.net-mvc – 它是否有意义在Webapi中有ViewModel?
- asp.net – Visual Studio 2010和Visual Studio 2012中的co
- asp.net – “SELECT * FROM …”VS“SELECT ID FROM …”性
- asp.net – 如何阅读maxAllowedContentLength
- asp.net-mvc-4 – ASP.NET Web API架构建议/反馈