ASP.NET Webサイト開発-データコンテキスト


DataContextはデータコンテキストとも呼ばれ、LINQ to SQLに操作データベースのエントリを提供します.LINQ to SQLを使用してデータベースを操作するには、まず、データベースにDataContextクラスから継承されたカスタムデータ上下クラスを作成する必要があります.

DataContextの概要


DataContextクラスはLINQ to SQLクラスで、データベースへの接続とデータベースの操作に関するリンク文字列情報とメソッドが含まれています。DataContextクラスでは、データベース接続または接続文字列を使用して、データベース内のすべてのエンティティのソースをマッピングし、ユーザーによるデータベースへの変更を追跡および識別できます。ユーザーは、SubmitChanges()メソッドを呼び出して、すべての変更をデータベースにコミットできます。


DataContextクラス(または派生クラス)のインスタンスがデータベースを操作すると、インスタンスはデータベースの接続を自動的にオン/オフにします。ユーザーがインスタンスの接続を明示的に開いている場合は、インスタンスの接続も明示的に閉じる必要があります。




DataContextクラスのプロパティ


        
1.接続属性接続
Connectionプロパティでは、DataContextクラスのインスタンスの接続(タイプはDbConnection)を取得できます.なお、ユーザは、属性の値(すなわち、接続オブジェクト)を取得すると、接続オブジェクトのデフォルト状態がオフになります.したがって、ユーザーが接続オブジェクトを使用する場合は、接続オブジェクトのステータスを明示的に開く必要があります.
        2.トランザクション属性Transaction
Transactionプロパティは、DataContextクラスのインスタンスに対してデータベースにアクセスするトランザクションを設定します.ここで、LINQ to SQLでは、次の3つのトランザクションがサポートされています.
①取引を表示します.DataContextクラスのインスタンスがTransaction属性の値を明示的に設定している場合.では、DataContextクラスのインスタンス呼び出しSubmitChanges()メソッドは、同じもので行われます.
②暗黙の事務.DataContextクラスのインスタンスがSubmitChanges()メソッドを異動すると、LINQ to SQLは指定されたトランザクション内にあるかどうかをチェックします.そうでない場合、LINQ to SQLはローカルトランザクションを開始し、生成されたSQLコマンドを実行します.
③明示的にトランザクションを配布できます.DataContextクラスのインスタンスは、Transactionプロパティで指定されたトランザクション内で、新しいトランザクションを作成せずにLINQ to SQL APIを呼び出すことができます.
        3.実行コマンドの最大時間属性CommandTimeout
CommandTimeoutプロパティでは、DataContextクラスのインスタンスのクエリー・データベース操作のタイムアウト期間を設定または取得できます.この時間の単位は秒で、デフォルトは30秒です.クエリー・データベースの操作に基づいて属性の値を大きくすることで、クエリー・データベースの操作が完了することを保証できます.
DataContextクラスのメソッド
DataContextクラスには、データベースを作成するCreateDatabase()メソッド、データベースが存在するかどうかを検出するDatabaseExistsOメソッド、データベースを削除するDeleteDatabaseOメソッド、SQLコマンドを実行するExecuteCommandOメソッド、SQLポーリングを実行するExecuteQueryOメソッドなど、複数のメソッドがあります.
本節では、ExecuteCommandOメソッドとExecuteQueryOメソッドについて重点的に説明します.
        
1.SQLコマンドを実行するExecuteCommand()メソッド
    
    
    
ExecuteCommand()メソッドでは、指定したSQL文を実行し、そのSQL文でデータベースを操作できます.ExecuteCommand()メソッドは、SQL文がレコードの数に影響する整数値を返します.
次のインスタンスコードは、指定されたSQL文を実行するためにExecuteCommandOメソッドを呼び出します.具体的な手順は次のとおりです.
    
    
    
    
(1)LinqDBDataContextクラスのインスタンスdbを作成する.
    
    
    
    
(2)実行されるSQL文を作成する.
    
    
    
    
(3)上記で指定したSQL文を実行するには、ExecuteCommandOメソッドを呼び出します.
    
    
    
(4)ExecuteCommandOメソッドが実行した結果,すなわち修正されたレコードの数を示す.
///
///  SQL   ExecuteCommand()  
///〈/summary〉

private void ExecuteCommandWithParam()
{
  //  LinqDB         
LinqDBDataContext db = new LinqDBDataContext(LinqSystem.LinqDBConnectionString);
  //  SQL  
string sql = "UPDATE Userlnfo SET Username = {0} WHEREID > 90";
  //  SQL  ,   SQL       
int result = db.ExecuteCommand(sql,"New Name");
  //       
Response.Write(result.ToString()+"      !");

実行結果:12個のデータが変更されました!
        2.SQLクエリを実行するExecuteQuery()メソッド
ExecuteQuery()メソッドでは、指定したSQLクエリー文を実行し、SQLクエリー文を使用してデータを取得できます.クエリー結果は、IEnumerableまたはIEnumerableのデータ型を持つオブジェクトを保存します.
次のインスタンスコードは、指定されたSQLクエリ文を実行するためにExecuteQuery()メソッドを呼び出します.具体的な手順は次のとおりです.
    
    
    
(1)LinqDBDataContextクラスのインスタンスdbを作成する.
    
    
    
(2)実行されるSQLクエリ文を作成する.
    
    
    
(3)呼び出し
ExecuteQuery()メソッドは、上記で指定した
SQLクエリ文、
クエリー結果はresult変数に保存されます.ここで、クエリ結果の要素のデータ型はUserInfoです.
    
    
    
(4)foreach文を用いてresult変数の情報を表示する.
///
///  SQL   ExecuteQuery()  
///

private void ExecuteSqlQuery()
{
    //  LinqDB         
    LinqDBDataContext db = new LinqDBDataContext(
    LinqSystem.LinqDBConnectionString);
    //  SQL  
    string sql = "SELECT TOP 5 * FROM UserInfo";

    IEnumerableusers = db.ExecuteQuery(sql);

    //       
    foreach(Userlnfo u in users)
    {
        Response.Write("    :"+u.Username+"
;     } }

実行結果:
     :admin
     :dorient
     :user1
     :user2
     :user3

        3
.データベースへの変更をコミットするSubmitChanges()メソッド
            
Su
bmi
tC
hanges()
メソッドでは、挿入、更新、または削除する自己修正オブジェクトのセットを計算し、対応する修正を実行してデータベースにコミットし、データベースを変更できます.
        4
・テーブルセットを取得するGetTable()メソッド
            
GetTable()
メソッドは、DataContextクラスのインスタンスのテーブルのセットを取得できます.
        5
.変更されたオブジェクトのGetChangeSet()メソッドの取得
            
Ge
tChangeSet()メソッドは、変更されたオブジェクトを取得し、3つの読み取り専用セット(Inserts、Deletes、Updates)からなるオブジェクトを返します.GetChangeSet()メソッドの戻り値のタイプはChangeSetで、3つの読み取り専用セット(Inserts、Deletes、Updates)で構成されています.ChangeSetクラスには、次の3つの属性があります.
ChangeSetから削除されたエンティティのDeletesプロパティ.
Insertsプロパティは、Changesetのエンティティに挿入されます.
Updatesプロパティは、ChangeSetで更新されたエンティティです.