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

Foi útil?

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?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top