Search code examples
c#asp.netexceptionenterprise-library.nettiers

weird exception error in nettiers generated code


I'm having weird issues with code generated with netTiers. I've tried to use the framework provided in a simple form to save information on one of the entities created.

Here is the method I'm calling from an ASPX page:

    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();
    }

When I call that method from a button click on the aspx page, i get the following exception information:

Server Error in '/' Application. The configuration file entlib.config could not be found. Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

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 

The following method seems to be the one that is causing the exception:

  /// <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);
        }
     }
  }

Now, here is the weirdest thing. I put breakpoints in to trace through and find the issue. I hit F5 in my browser, and there was no exception error. After some trial and error, I've found that I get this exception error every time I submit the form, but if I hit F5, it resubmits fine without error, and the update does happen in the database. It would be greatly appreciated if someone could advise as to why this would be happening and what I can do to fix this error. The entlib.config file is indeed in the project, It was generated as well, and I've verified that it does actually exist.

The information on the EntLib that is being called with the ValidationIntegrationHelper is:

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

UPDATE: I still haven't been able to figure out how to fix this, so I did a terrible thing, I put a try/catch block around the code in DoValidate, so that it won't blow up on me. I needed to get this not to break while the clients are using it, but I still need to figure out why it is doing this, and fix it, instead of ignoring it before we are into production. If it just handles validation, then I can handle ignoring it, because I'm validating on the front side before saving or updating the entities.


Solution

  • The issue seems to be just in the Enterpise Library validation. I regenerated the project with NetTiers validation and I don't have the issue. I wasn't able to figure out what the issue was, but generating the project with the NetTiers validation made the problem go away.