2011-07-19 10 views
0

netTiersで生成されたコードに奇妙な問題があります。私は簡単な形式で提供されているフレームワークを使って、作成されたエンティティの1つに情報を保存しようとしました。nettiers生成コードで奇妙な例外エラー

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ページ上のボタンクリックからそのメソッドを呼び出すと、私は、次の例外情報を取得:

サーバーをここで

は、私はASPXページから呼んでいる方法であり、 '/'アプリケーションでエラーが発生しました。 構成ファイルentlib.configが見つかりませんでした。 説明:現在のWeb要求の実行中に、未処理の例外が発生しました。エラーの詳細とコード内のどこで発生したのかについては、スタックトレースを参照してください。

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 

次のメソッドが例外を引き起こしている1であるように思わ:

/// <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ファイルは実際にプロジェクト内にあり、生成されたもので、実際に存在することを確認しました。

ValidationIntegrationHelperと呼ばれているEntLibの情報は次のとおりです。

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

UPDATE:私はまだこの問題を解決する方法を理解することができていないので、私はひどいことをした、I DoValidateのコードの周りにtry/catchブロックを置いて、それが私に爆破されないようにしてください。クライアントが使用している間にこれを壊さないようにする必要がありましたが、なぜ私たちが生産に入る前にそれを無視するのではなく、なぜこれをやっているのか把握して修正する必要があります。検証だけを処理すれば、それを無視して処理することができます。なぜなら、エンティティを保存または更新する前に正面から検証しているからです。

答えて

0

問題はエンタープライズライブラリの検証にあるようです。私はNetTiers検証でプロジェクトを再生成しましたが、問題はありません。問題の内容を把握することはできませんでしたが、NetTierの検証でプロジェクトを生成することで問題は解決しました。

+0

.NetTiersには、エンタープライズライブラリへのオプションの依存関係が付属しています。ファイルは出力ビルドに含まれています(依存フォルダかもしれません)。それらはアプリケーションと共に展開する必要があり、entlibセクション(ロギング、例外、検証など)ごとの設定はweb/app.configで設定する必要があります。 entlib.configは設定ファイルソースです。 – Junto