странная ошибка исключения в сгенерированном неттье коде - PullRequest
0 голосов
/ 19 июля 2011

У меня странные проблемы с кодом, сгенерированным с помощью netTiers. Я попытался использовать инфраструктуру, предоставленную в простой форме, для сохранения информации об одном из созданных объектов.

Вот метод, который я вызываю со страницы ASPX:

    public void UpdateSupplier(Object sender, EventArgs e)
    {
        // Update Supplier name and code from update form
        supplier.Name = txtName.Text;
        supplier.Code = txtCode.Text;

        // Save the Changes - Exception happens on next line!
        PPGEDI.Data.DataRepository.SuppliersEntityEntityProvider.Save(supplier);

        // Reload the information from the database to display
        ReLoadInformation();
    }

Когда я вызываю этот метод нажатием кнопки на странице aspx, я получаю следующую информацию об исключении:

Ошибка сервера в «/» приложении. Не удалось найти файл конфигурации entlib.config. Описание: во время выполнения текущего веб-запроса произошло необработанное исключение. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.

Exception Details: System.IO.FileNotFoundException: The configuration file entlib.config could not be found.

Source Error:

Line 190:       public override void DoValidate(object objectToValidate, object currentTarget, string key, ValidationResults validationResults)
Line 191:       {
Line 192:           Validator validator = new ValidationIntegrationHelper(this).GetValidator();
Line 193:
Line 194:           if (validator != null)


Source File: PPGEDI.Entities\Validation\PropertyValidator.cs    Line: 192

Stack Trace:

[FileNotFoundException: The configuration file entlib.config could not be found.]
   Microsoft.Practices.EnterpriseLibrary.Common.Configuration.FileConfigurationSource.GetRootedCurrentConfigurationFile(String configurationFile) +221
   Microsoft.Practices.EnterpriseLibrary.Common.Configuration.FileConfigurationSource..ctor(String configurationFilepath, Boolean refresh, Int32 refreshInterval) +45
   Microsoft.Practices.EnterpriseLibrary.Common.Configuration.FileConfigurationSource..ctor(String configurationFilepath, Boolean refresh) +48
   Microsoft.Practices.EnterpriseLibrary.Common.Configuration.FileConfigurationSource..ctor(String configurationFilepath) +39
   Microsoft.Practices.EnterpriseLibrary.Common.Configuration.FileConfigurationSourceElement.CreateSource() +64
   Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ConfigurationSourceFactory.Create(String name) +355
   Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ConfigurationSourceFactory.Create() +96
   Microsoft.Practices.EnterpriseLibrary.Common.Configuration.EnterpriseLibraryContainer.CreateDefaultContainer() +25
   Microsoft.Practices.EnterpriseLibrary.Common.Configuration.EnterpriseLibraryContainer.SetCurrentContainerIfNotSet() +84
   Microsoft.Practices.EnterpriseLibrary.Common.Configuration.EnterpriseLibraryContainer.get_Current() +22
   Microsoft.Practices.EnterpriseLibrary.Validation.ValidationFactory.get_DefaultCompositeValidatorFactory() +25
   Microsoft.Practices.EnterpriseLibrary.Validation.PropertyValidationFactory.GetPropertyValidatorFromAttributes(Type type, PropertyInfo propertyInfo, String ruleset, MemberAccessValidatorBuilderFactory memberAccessValidatorBuilderFactory) +166
   Microsoft.Practices.EnterpriseLibrary.Validation.PropertyValidationFactory.GetPropertyValidator(Type type, PropertyInfo propertyInfo, String ruleset, ValidationSpecificationSource validationSpecificationSource, MemberAccessValidatorBuilderFactory memberAccessValidatorBuilderFactory) +264
   Microsoft.Practices.EnterpriseLibrary.Validation.PropertyValidationFactory.GetPropertyValidator(Type type, PropertyInfo propertyInfo, String ruleset, ValidationSpecificationSource validationSpecificationSource, MemberValueAccessBuilder memberValueAccessBuilder) +71
   Microsoft.Practices.EnterpriseLibrary.Validation.Integration.ValidationIntegrationHelper.GetValidator() +106
   PPGEDI.Entities.Validation.PropertyValidator.DoValidate(Object objectToValidate, Object currentTarget, String key, ValidationResults validationResults) in PPGEDI.Entities\Validation\PropertyValidator.cs:192
   Microsoft.Practices.EnterpriseLibrary.Validation.Validator.Validate(Object target) +80
   PPGEDI.Entities.EntityBaseCore.Validate(String propertyName) in PPGEDI.Entities\EntityBaseCore.generated.cs:477
   PPGEDI.Entities.EntityBaseCore.OnPropertyChanged(PropertyChangedEventArgs e) in PPGEDI.Entities\EntityBaseCore.generated.cs:342
   PPGEDI.Entities.EntityBaseCore.OnPropertyChanged(String propertyName) in PPGEDI.Entities\EntityBaseCore.generated.cs:329
   PPGEDI.Entities.SuppliersEntityBase.set_Name(String value) in SuppliersEntityBase.generated.cs:279
   PPGEDI.Supplier.Supplier_Main_Config.UpdateSupplier(Object sender, EventArgs e) in Supplier_Main_Config.aspx.cs:29
   System.Web.UI.WebControls.Button.OnClick(EventArgs e) +118
   System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +112
   System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +36
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5563


Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.225 

Кажется, что следующий метод вызывает исключение:

  /// <summary>
  /// Does the validate.
  /// </summary>
  /// <param name="objectToValidate">The object to validate.</param>
  /// <param name="currentTarget">The current target.</param>
  /// <param name="key">The key.</param>
  /// <param name="validationResults">The validation results.</param>
  public override void DoValidate(object objectToValidate, object currentTarget, string key, ValidationResults validationResults)
  {
     // Exception Error on next line!!!
     Validator validator = new ValidationIntegrationHelper(this).GetValidator();

     if (validator != null)
     {
        ValidationResults results = validator.Validate(this);

        if (!results.IsValid)
        {
           validationResults.AddAllResults(results);
        }
     }
  }

Теперь вот самая странная вещь. Я ставлю точки останова, чтобы проследить и найти проблему. Я нажал F5 в своем браузере, и не было ошибки исключения. После некоторых проб и ошибок, я обнаружил, что я получаю эту ошибку исключения каждый раз, когда я отправляю форму, но если я нажимаю F5, она повторно отправляется нормально без ошибок, и обновление происходит в базе данных. Был бы очень признателен, если бы кто-то мог посоветовать, почему это происходит и что я могу сделать, чтобы исправить эту ошибку. Файл entlib.config действительно находится в проекте, он также был сгенерирован, и я убедился, что он действительно существует.

Информация о EntLib, который вызывается с помощью ValidationIntegrationHelper:

Assembly Microsoft.Practices.EnterpriseLibrary.Validation.dll, v2.0.50727

ОБНОВЛЕНИЕ: Я до сих пор не смог понять, как это исправить, поэтому я сделал ужасную вещь, я поместил блок try / catch вокруг кода в DoValidate, чтобы он не взорвался , Мне нужно было, чтобы это не сломалось, пока клиенты его используют, но мне все еще нужно выяснить, почему он это делает, и исправить это, вместо того, чтобы игнорировать это, прежде чем мы начнем работу. Если он просто обрабатывает проверку, то я могу игнорировать ее, потому что я проверяю на лицевой стороне перед сохранением или обновлением сущностей.

1 Ответ

0 голосов
/ 05 августа 2011

Кажется, проблема только в проверке библиотеки Enterpise. Я обновил проект с проверкой NetTiers, и у меня нет проблемы. Я не смог выяснить, в чем проблема, но создание проекта с проверкой NetTiers решило проблему.

...