S # arp Architecture modelo de erro aglutinante enumeração
-
07-07-2019 - |
Pergunta
Estou recebendo um erro do fichário de modelo SharpArchitecture. "Coleção foi modificada; operação de enumeração não pode executar." (Rastreamento de pilha na parte inferior).
páginas Meu MVC para criar e editar a minha SettingsModel jogue o erro. Isso começou a acontecer quando nós atualizado para a versão de lançamento do S # arp Architecture 1.0. Minha classe tem algumas listas como propriedades. Uma das listas contém classes com outra outra lista como uma propriedade. Eu não tenho certeza qual lista está jogando o erro. Alguém pode fornecer orientação sobre a forma de solucionar este ou coisas para procurar em meus modelos que pode causar isso?
Esta é minha classe SettingsModel:
public class SettingsModel : Entity
{
public SettingsModel()
{
AttributeSettingsList = new List<AttributeSettingsModel>();
}
public virtual void AddAttributeSettings(AttributeSettingsModel attSettings)
{
AttributeSettingsList.Add(attSettings);
attSettings.Settings = this;
}
[NotNullNotEmpty(Message = "Description must be provided")]
public virtual string Description { get; set; }
[DomainSignature]
[Range(0, 100, Message = "ModelAPercentage must be between 0 and 100")]
public virtual int ModelAPercentage { get; set; }
[DomainSignature]
[Range(0, 100, Message = "ModelBPercentage must be between 0 and 100")]
public virtual int ModelBPercentage { get; set; }
public virtual IList<AttributeSettingsModel> AttributeSettingsList { get; set; }
public virtual IList<EntityMappingModel> EntityMappingList { get; set; }
public SettingsModel(string Description, int ModelAPercentage, int ModelBPercentage)
: this()
{
this.Description = Description;
this.ModelAPercentage = ModelAPercentage;
this.ModelBPercentage = ModelBPercentage;
}
}
Este é o método SharpArchitecture jogando o erro:
private void SetEntityCollectionProperty(ModelBindingContext bindingContext,
PropertyDescriptor propertyDescriptor, object value) {
if (value as IEnumerable != null &&
IsSimpleGenericBindableEntityCollection(propertyDescriptor.PropertyType)) {
object entityCollection = propertyDescriptor.GetValue(bindingContext.Model);
Type entityCollectionType = entityCollection.GetType();
foreach (object entity in (value as IEnumerable)) {
entityCollectionType.InvokeMember("Add",
BindingFlags.Public | BindingFlags.Instance | BindingFlags.InvokeMethod, null, entityCollection,
new object[] { entity });
}
}
}
Aqui está o rastreamento de pilha:
[InvalidOperationException: coleção foi modificada; operação enumeração não pode executar.] System.ThrowHelper.ThrowInvalidOperationException (resource ExceptionResource) +51 System.Collections.Generic.Enumerator.MoveNextRare () 7661017 System.Collections.Generic.Enumerator.MoveNext () 61 SharpArch.Web.ModelBinder.SharpModelBinder.SetEntityCollectionProperty (ModelBindingContext bindingContext, PropertyDescriptor PropertyDescriptor, Object value) +358 SharpArch.Web.ModelBinder.SharpModelBinder.SetProperty (ControllerContext ControllerContext, ModelBindingContext bindingContext, PropertyDescriptor PropertyDescriptor, Object value) +61 System.Web.Mvc.DefaultModelBinder.BindProperty (ControllerContext ControllerContext, ModelBindingContext bindingContext, PropertyDescriptor PropertyDescriptor) 265 SharpArch.Web.ModelBinder.SharpModelBinder.BindProperty (ControllerContext ControllerContext, ModelBindingContext bindingContext, PropertyDescriptor PropertyDescriptor) 225 System.Web.Mvc.DefaultModelBinder.BindProperties (ControllerContext ControllerContext, ModelBindingContext bindingContext) 125 System.Web.Mvc.DefaultModelBinder.BindComplexElementalModel (ControllerContext ControllerContext, ModelBindingContext bindingContext, Object Model) 293 System.Web.Mvc.DefaultModelBinder.BindComplexModel (ControllerContext ControllerContext, ModelBindingContext bindingContext) 772 System.Web.Mvc.DefaultModelBinder.BindModel (ControllerContext ControllerContext, ModelBindingContext bindingContext) 345 SharpArch.Web.ModelBinder.SharpModelBinder.BindModel (ControllerContext ControllerContext, ModelBindingContext bindingContext) 39 System.Web.Mvc.DefaultModelBinder.UpdateCollection (ControllerContext ControllerContext, ModelBindingContext bindingContext, Tipo elementType) 408 System.Web.Mvc.DefaultModelBinder.BindComplexModel (ControllerContext ControllerContext, ModelBindingContext bindingContext) 756 System.Web.Mvc.DefaultModelBinder.BindModel (ControllerContext ControllerContext, ModelBindingContext bindingContext) 345 SharpArch.Web.ModelBinder.SharpModelBinder.BindModel (ControllerContext ControllerContext, ModelBindingContext bindingContext) 39 System.Web.Mvc.DefaultModelBinder.BindProperty (ControllerContext ControllerContext, ModelBindingContext bindingContext, PropertyDescriptor PropertyDescriptor) 231 SharpArch.Web.ModelBinder.SharpModelBinder.BindProperty (ControllerContext ControllerContext, ModelBindingContext bindingContext, PropertyDescriptor PropertyDescriptor) 225 System.Web.Mvc.DefaultModelBinder.BindProperties (ControllerContext ControllerContext, ModelBindingContext bindingContext) 125 System.Web.Mvc.DefaultModelBinder.BindComplexElementalModel (ControllerContext ControllerContext, ModelBindingContext bindingContext, Object Model) 293 System.Web.Mvc.DefaultModelBinder.BindComplexModel (ControllerContext ControllerContext, ModelBindingContext bindingContext) 772 System.Web.Mvc.DefaultModelBinder.BindModel (ControllerContext ControllerContext, bin ModelBindingContextdingContext) 345 SharpArch.Web.ModelBinder.SharpModelBinder.BindModel (ControllerContext ControllerContext, ModelBindingContext bindingContext) 39 System.Web.Mvc.ControllerActionInvoker.GetParameterValue (ControllerContext ControllerContext, ParameterDescriptor parameterDescriptor) 219 System.Web.Mvc.ControllerActionInvoker.GetParameterValues ??(ControllerContext ControllerContext, ActionDescriptor actionDescriptor) 109 System.Web.Mvc.ControllerActionInvoker.InvokeAction (ControllerContext ControllerContext, String actionName) 399 System.Web.Mvc.Controller.ExecuteCore () 126 System.Web.Mvc.ControllerBase.Execute (RequestContext requestContext) 27 System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute (RequestContext requestContext) 7 System.Web.Mvc.MvcHandler.ProcessRequest (HttpContextBase httpContext) 151 System.Web.Mvc.MvcHandler.ProcessRequest (HttpContext httpContext) 57 System.Web.Mvc.MvcHandler.System.Web.IHttpHandler.ProcessRequest (HttpContext httpContext) 7 System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () 181 System.Web.HttpApplication.ExecuteStep (IExecutionStep etapa, Boolean & completedSynchronously) +75
Solução
Parece haver um erro no método arquitetura SetEntityCollectionProperty afiada. Sua nos últimos quatro linhas:
foreach (object entity in (value as IEnumerable)) {
entityCollectionType.InvokeMember("Add",
BindingFlags.Public | BindingFlags.Instance | BindingFlags.InvokeMethod, null, entityCollection,
new object[] { entity });
}
Sua intenção parece ser a de preencher a classe de coleção modelo (EntityCollection) a partir dos valores no IEnumerable passado como valor. No entanto, estes dois objectos são a mesma referência. Ele já está preenchida. Quando o "Adicionar" método é invocado, o EntityCollection é modificado, que é o mesmo objecto que está a ser iterado. Em seguida, a exceção é lançada.
Comentário ou excluir esse bloco de código e seu código deve ser executado.
Outras dicas
Do comentar este bloco de código afetar outras funções do S # arp?