Microsoft Enterprise Library の使用
 
このページをシェアする                  
Microsoft Enterprise Library の使用
アプリケーションでの Data Access Application Block の使用
Microsoft Enterprise Library を使用すると、データ アクセスのような一般的なタスクを移植性の高いコードにラッピングすることによって、ある DBMS から別の DBMS へのアプリケーションの移行を容易にし、アプリケーション開発を簡略化することができます。
Zen データ プロバイダーは、Data Access Application Block(DAAB)および Logging Application Block(LAB)をサポートします。DAAB のクラスは ADO.NET で最も頻繁に使用される機能へのアクセスを提供します。アプリケーションは、アプリケーションレ イヤー経由でデータを渡したり、変更されたデータをデータベースに戻したりするような作業に対して DAAB を使用できます。DAAB を使用すると、アプリケーションを新規作成または修正するたびに同じデータ アクセス作業のコードを書き続ける必要がなくなるため、時間をより生産的に使うことができます。
標準の Logging Application Block および設計パターンを使用するアプリケーションは、ADO.NET Entity Framework データ プロバイダーの一部として生成された SQL をすばやく表示することができます。
お使いのデータ プロバイダーで Enterprise Library の機能を使用するには、https://msdn.microsoft.com/en-us/library/dn169621.aspx から Microsoft Enterprise Library 6.0 をダウンロードしてください。Enterprise Library ドキュメントをダウンロードすることも可能です。このドキュメントには、アプリケーション ブロックの使い方に関する詳しい情報が記述されています。
Data Access Application Block
Data Access Application Block(DAAB)は、日常的なデータベース タスクについて、開発者が ADO.NET の決まりきったアクセス コードを標準化されたコードに置き換えできるように設計されています。Database クラスのオーバーロード メソッドは次のことが行えます。
スカラー値または XmlReaders を返す
どのパラメーターが必要かを判断し、それらを作成する
トランザクションにコマンドを含める
アプリケーションで特定の DBMS 機能を扱う必要がある場合は、ADO.NET データ プロバイダーを使用できます。
DAAB の使用に適した状況
DAAB には、データベースにアクセスするための最も一般的なメソッドを簡略化する少数のメソッドが含まれています。それぞれのメソッドは、データの取得やデータベースへの接続の管理に必要なロジックをカプセル化します。アプリケーションが標準のデータ アクセス技術を使用する場合は、アプリケーション ブロックの使用を考慮してください。
DAAB を ADO.NET と一緒に使用することにより、ADO.NET 用のアプリケーションを作成する際の効率と生産性が向上します。抽象 Database クラスは、DbCommand クラスで使用されるメソッドと同じ ExecuteNonQuery、ExecuteReader、ExecuteScalar など多数のメソッドを提供するか、またはデータベース固有のコードが使用されている場合は、PsqlCommand などのデータ プロバイダー固有のクラスを提供します。
開発中にはデフォルトの DAAB を使用するのが便利ですが、その結果作成されたアプリケーションは移植性に欠けます。プロバイダー固有の Zen DAAB 実装を使用すると、アプリケーションには ADO.NET データ プロバイダーの SQL レベル調整機能が含められます。アプリケーションが複数のデータベースにアクセスする必要があろうと、目的のデータ ソースが変更されると予想されていようと、より高い柔軟性を持つことができます。
汎用クラスとデータベース固有のクラスの使用
アプリケーション ブロックは、異なる種類のデータベース間で同じコードの使用が可能になるコードを ADO.NET に補完します。DAAB を ADO.NET データベース プロバイダーと一緒に使用する場合、次の 2 つの選択肢があります。
GenericDatabase クラス
プロバイダー固有の Zen DAAB 実装
GenericDatabase クラス オプションは、データベースの動作に特殊な制御を必要とするアプリケーションにはあまり適しません。移植性のためには、プロバイダー固有のソリューションが最適な方法です。
アプリケーションが特殊な方法でデータを取得する必要がある場合、または、Zen 固有の機能を利用するためにコードのカスタマイズが必要な場合は、ADO.NET データ プロバイダーを使用する方がよりニーズに合うでしょう。
DAAB の構成
アプリケーションで DAAB を使用できるよう構成する前に、環境を設定する必要があります。
1 https://msdn.microsoft.com/en-us/library/dn169621.aspx から Microsoft Enterprise Library 6.0 をダウンロードしてインストールします。
2 <インストール ディレクトリ>\Enterprise Library\Src\CS\Pervasive にある、データ プロバイダーの Zen DAAB プロジェクトを開きます。
3 次に、プロジェクトをコンパイルして出力ディレクトリを書き留めます。
Data Access Application Block の構成方法は、次の 2 つの手順から成ります。
新しい DAAB エントリを追加するには
アプリケーションへの Data Access Application Block の追加
新しい DAAB エントリを追加するには
では、Enterprise Library Configuration ツールを使って、新しい DAAB エントリを追加します。
1 Enterprise Library Configuration]を右クリックし、[New Application]を選択します。
2 Application Configuration]を右クリックし、次に[New]>[Data Access Application Block]を選択します。Enterprise Library Configuration ウィンドウが現れます。
3 [Name]フィールドに DAAB 接続文字列の名前を入力します。
4 [ConnectionString]フィールドに接続文字列を入力します。
5 フィールドを右クリックして、データ プロバイダーを選択します。たとえば、Pervasive.Data.SqlClient を選択します。
6 Custom Provider Mappings]を右クリックして、[New]>[Provider Mapping]を選択します。
7 [Name]フィールドに手順 5 で入力したデータ プロバイダー名を選択します。
8 TypeName]フィールドを選択してから[...](参照)ボタンをクリックし、構築する Zen DAAB のデバッグ出力ディレクトリへ移動します。次に、TypeName を選択します。たとえば、Zen TypeName は Pervasive.EnterpriseLibrary.Data.Pervasive.dll です。
9 [Enterprise Library Configuration]ウィンドウは当分開いたままにしておき、次のセクションを完了するまで構成を保存しないでください。
アプリケーションへの Data Access Application Block の追加
DAAB を新規または既存のアプリケーションに追加するには、以下の手順を行います。
1 Visual Studio ソリューションに次の 2 つの参照を追加します。
Enterprise Library Shared Library
Enterprise Library Data Access Application Block
2 C# ソース コードに次のディレクティブを追加します。
using Microsoft.Practices.EnterpriseLibrary.Data;
using System.Data;
3 ソリューションをリビルドして新しい従属物が確実に機能するようにします。
4 現在のソリューションでの出力の Debug または Release パスの場所を決定して、Enterprise Library Configuration ウィンドウに戻ります(新しい DAAB エントリを追加するにはを参照してください)。
5 Application Configuration]ノードの下にある接続文字列を右クリックして、[Save Application]を選択します。
6 現在のソリューションの Debug または Release 出力ディレクトリに移動し、現在のソリューションの .exe ファイルを見つけます。
7 ファイル名を 1 回クリックし、名前に .config を付加します(たとえば MyApp.config)。
8 保存するファイルの種類に "All Files" が選択されていることを確認して[Save]をクリックします。
9 ファイル エクスプローラーを使用して、Zen DAAB ディレクトリから Pervasive.EnterpriseLibrary.Data.Pervasive.dll をコピーします。
10 この DLL のコピーを現在のソリューションの Debug または Release 出力ディレクトリのいずれかに配置します。
アプリケーション コードでの DAAB の使用
これで DAAB の構成が終わったので、この DAAB 上にアプリケーションを構築することができます。
下の例では、DAAB MyApp および DatabaseFactory を使用して、Zen データ ソースによる裏付けのある Database オブジェクトのインスタンスを生成します。
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Practices.EnterpriseLibrary.Data;
using System.Data;
 
namespace DAAB_Test_App_1
{
    class Program
    {
        static void Main(string[] args)
 
        {
            Database database = DatabaseFactory.CreateDatabase("MyApp");
            DataSet ds = database.ExecuteDataSet(CommandType.TableDirect, "SQLCOMMANDTEST_NC_2003SERVER_1");
 
        }
    }
}
これで、Microsoft Enterprise Library の DAAB コーディング パターンを自由に使用できます。
Logging Application Block
Enterprise Library の Logging Application Block(LAB)を使用すると、共通のログ機能を簡単に実装できるようになります。ADO.NET Entity Framework データ プロバイダーは標準の Logging Application Block および設計パターンを使用し、追加機能用の LAB カスタマイズを提供します。
LAB の使用に適した状況
アプリケーションで、データベース、メッセージ キュー、Windows イベント ログ、または Windows Management Instrumentation(WMI)に情報のログを記録することが義務付けられている場合は、LAB がこの機能を提供します。特に、カテゴリや優先順位に基づいてログ記録メッセージをフィルター選択する必要がある場合や、メッセージを書式設定する必要がある場合、アプリケーション コードを変更しないでメッセージの宛先を変更する必要がある場合には、LAB が役立ちます。
LAB の構成
アプリケーションにログ機能を追加するには、Enterprise Library の構成ツールを使って、アプリケーションの構成ファイル(app.config または web.config)にエントリを追加します。このツールは、Logging Application Block の .config ファイルを有効にするための固有の命令を含んでいます。またこのツールは、LAB を有効にするために必要な AppSetting も含んでいます。
Logging Application Block の出力を有効にするには、環境プロパティ Psql_Enable_Logging_Application_Block_Trace を true に設定します。あるいは、app.config ファイルで AppSetting プロパティの Psql.EnableLoggingApplicationBlock を true に設定します。
次の C# コードの一部は、app.config ファイルの loggingConfiguration プロパティを示しています。
<loggingConfiguration name="Logging Application Block" tracingEnabled="true"
defaultCategory="General" logWarningsWhenNoCategoriesMatch="true">
上記のプロパティのいずれかを false に設定すると、ロギング ブロックが無効になります。
有効にした場合、データ プロバイダーは、ADO.NET Entity Framework の標準的なクエリ ツリーによって生成される各 SQL ステートメントに対し、新しい LogEntry エントリのインスタンスを確立する必要があります。
ログ記録ブロックに記録される SQL は、最終的にネットワーク経由で送信される SQL でなければなりません。
Logging Application Block を構成するには
1 スタート]>[すべてのプログラム]メニューから、[Microsoft patterns & practices]>[Enterprise Library 6.0]>[Enterprise Library Configuration]を選択します。Enterprise Library Configuration ウィンドウが現れます。
2 File]>[New Application]を選択します。
3 Application Configuration]ノードを右クリックして、[New]>[Logging Application Block]を選択します。
4 Category Sources]を右クリックして、[New]>[Category]を選択します。
5 Name ペインで Name を選択します。新しいカテゴリの名前を入力して Enter キーを押します。
6 SourceLevels リストから、この新しいカテゴリのログ レベルを設定します。デフォルトでは、すべてのログ レベルが有効になっています。
7 新しいカテゴリを右クリックして、[New]>[Trace Listener Reference]を選択します。Formatted EventLog TraceListener ノードが追加されます。ReferencedTraceListener リストから、"Formatted EventLog TraceListener" を選択します。
8 手順 4 から 7 を繰り返して、次のカテゴリを作成します。
Zen Information:エラーと関係のない情報
Zen Command:SQL、Parameter、および DbCommandTree のログを有効にします
9 File]>[Save Application]を選択し、構成ファイルの名前を入力します。デフォルトでは、ファイルは C:\Program Files\Microsoft Enterprise Library\Bin\filename.exe.config に保存されます。filename は入力した名前になります。
新しい Logging Application Block エントリの追加
では、Enterprise Library Configuration ツールを使って、新しい Logging Application Block エントリを追加します。
1 Enterprise Library Configuration]を起動して、[File]>[New Application]を選択します。
2 Application Configuration]を右クリックし、次に[New]>[Logging Application Block]を選択します。右側のペインに Configuration section が表示されます。
3 TracingEnabled]フィールドで True を選択します。
4 Logging Application Block を保存します。
アプリケーション コードでの LAB の使用
構成した LAB を、アプリケーションの app.config ファイルまたは web.config ファイルに追加する必要があります。
LAB とデータ プロバイダーの対話を有効にし構成するには、以下の設定を使用します。
EnableLoggingApplicationBlock:Logging Application Block を有効にします。
LABAssemblyName:Logging Application Block を適用するアセンブリ名を指定します。
メモ:Microsoft Enterprise Library 4.1 バイナリ リリース以外のバージョンの LAB を使用する場合は、LABAssemblyName を設定する必要があります。たとえば、これよりも古いバージョンや新しいバージョン、あるいはカスタマイズしたバージョンの LAB を使用する場合には、LABAssemblyName の値の指定が必要です。
LABLoggerTypeName:Logging Application Block の型名を指定します。
LABLogEntryTypeName:LogEntry オブジェクトの型名を指定します。
次のコードは、Zen データ アクセス アプリケーションに追加することができる Logging Application Block の例を示します。
<loggingConfiguration name="Logging Application Block"
tracingEnabled="true"
    defaultCategory="" logWarningsWhenNoCategoriesMatch="true">
    <listeners>
        <add fileName="rolling.log"
           footer="----------------------------------------"
           header="----------------------------------------"
           rollFileExistsBehavior="Overwrite"
           rollInterval="None" rollSizeKB="0"
           timeStampPattern="yyyy-MM-dd"
           listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.RollingFlatFileTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
           traceOutputOptions="None" filter="All" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.RollingFlatFileTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
           name="Rolling Flat File Trace Listener" />
    </listeners>
    <formatters>
        <add template="Message: {message}&#xD;&#xA;Category: {category}&#xD;&#xA;Priority: {priority}&#xD;&#xA;EventId: {eventid}&#xD;&#xA;Severity: {severity}&#xD;&#xA;Title:{title}&#xD;&#xA;&#xD;&#xA;"
           type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
           name="Text Formatter" />
    </formatters>
    <categorySources>
        <add switchValue="All" name="Psql">
            <listeners>
                <add name="Rolling Flat File Trace Listener" />
            </listeners>
        </add>
    </categorySources>
    <specialSources>
        <allEvents switchValue="All" name="All Events" />
        <notProcessed switchValue="All" name="Unprocessed Category" />
        <errors switchValue="All" name="Logging Errors &amp; Warnings">
            <listeners>
                <add name="Rolling Flat File Trace Listener" />
            </listeners>
        </errors>
    </specialSources>
</loggingConfiguration>
その他のリソース
次のソースは、アプリケーション ブロック使用に関する追加情報を提供します。
Microsoft patterns & practices Developer Center にはアプリケーション ブロックに関するセクションが含まれています。
Data Access Application Block を使用する作業やアプリケーションの概要については、次のサイトで "Introduction to the Data Access Application Block" を参照してください。
http://msdn.microsoft.com/en-us/library/cc309168.aspx
Microsoft patterns & practices Enterprise Library には、Logging Application Block の使い方に関する FAQ セクションがあります。
http://entlib.codeplex.com/Wiki/View.aspx?title=EntLib%20FAQ
Microsoft Channel 9 Enterprise Library FAQ にはアプリケーション ブロックの使用に関する概念情報が含まれています。次のサイトを参照してください。
http://channel9.msdn.com/wiki/default.aspx/Channel9.EnterpriseLibraryFAQ