Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

Caché Entity Framework Provider の使用法

Entity Framework は、.NET 開発者がドメイン固有オブジェクトを使用してリレーショナル・データを処理できるようにするオブジェクト・リレーショナル・マッパです。これにより、開発者が通常記述する必要があるデータ・アクセス・コードの大半が必要なくなります。Caché には、Entity Framework 6 テクノロジを使用して Caché データベースにアクセスできるようにする Caché Entity Framework Provider が含まれています。 (Entity Framework 5 を使用している場合は、詳細についてインターシステムズの担当者にお問い合わせください。).NET Entity Framework の詳細は、http://www.asp.net/entity-frameworkOpens in a new tab を参照してください。

この章には、以下のセクションが含まれます。

  • Caché Entity Framework Provider の設定 — システム要件、インストール、および設定に関する情報が記載されています。

  • Entity Framework の開始 — EF の使用を開始するための方法を説明します。

    • Code First — データ・クラスの定義から開始し、クラス・プロパティからデータベースを生成します。

    • Database First Database First — 既存のデータベースから開始します。"サンプル・データベースの設定" セクションの手順に従うことにより、データベースを設定できます。続けて、Entity Framework を使用して、そのデータベースのフィールドに基づいて Web アプリケーションのコードを生成します。

    • Model First Model First — エンティティとリレーションシップを示すデータベース・モデルを作成することから開始します。その後、モデルからデータベースを生成します。

このセクションでは、Entity Framework を開始するための 3 つの方法を説明します。

Caché Entity Framework Provider の設定

Caché Entity Framework Provider のインストールおよび設定を行うには、このセクションの手順を実行します。

システム要件

Caché Entity Framework Provider を使用するには、以下のソフトウェアが必要になります。

  • Update 5 (またはそれ以降のアップデート) が適用された Visual Studio 2013 (Professional または Ultimate)。

  • installdir\dev\dotnet\bin\v4.0.30309 ディレクトリにある Caché Entity Framework Provider のディストリビューション。このディレクトリには、設定手順で使用する以下のファイルが含まれています。

    • CacheEF.zip — インストール・ファイル。

    • CacheEF.zip\setup.cmd — DLL の InterSystems.Data.CacheClient.dll および InterSystems.Data.CacheVSTools.dll をインストールします。

    • CacheEF.zip\Nuget\InterSystems.Data.Entity6.4.5.0.0.nupkg — Caché Entity Framework Provider をインストールします。

    • CacheEF.zip\CreateNorthwindEFDB.sql — サンプル・データベースの作成に使用されます。

設定の実行および変数の設定

以下の手順を実行します。

  1. installdir\dev\dotnet\bin\v4.0.30309\CacheEF.zip のコンテンツを CacheEF と呼ばれるフォルダ (zip ファイルと同じディレクトリ内) に抽出します。\CacheEF\setup.cmd を実行します。

  2. Windows で、[すべてのプログラム][Visual Studio 2013][Visual Studio のツール] の順に選択します。

  3. 表示された Windows エクスプローラのフォルダで、[Developer Command Prompt for VS2013] を右クリックし、[管理者として実行] を選択して、以下を入力します。

    devenv /setup
    

    このコマンドにより、HKEY_LOCAL_MACHINE から以下のキーが再生成されます。

    HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\12.0_Config //VS 2013

Visual Studio へのファイルのコピー

CacheEF ディレクトリから Visual Studio に 2つのファイルをコピーします。

  • SSDLToCacheSQL.tt

  • GenerateCacheSQL.Utility.ttinclude

コピー元: <cacheinstalldir>\dev\dotnet\bin\v4.0.30319\CacheEF\Templates。コピー先: C:\Program Files (x86)\Microsoft Visual Studio 1x.0\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\DBGen

Caché サーバへの Visual Studio の接続

Caché インスタンスに Visual Studio を接続するには、以下の手順を実行します。

  1. Visual Studio を開き、[表示][サーバー エクスプローラ] の順に選択します。

  2. [データ接続] を右クリックして、[接続の追加] を選択します。[接続の追加] ダイアログで、以下の手順を実行します。

    1. [データ ソース][Cache Data Source (.Net Framework Data Provider for Cache)] を選択します。

    2. [サーバー] を選択します。

    3. [ユーザー名] および [パスワード] を入力します。[接続] をクリックします。

    4. リストからネームスペースを選択します。[OK] をクリックします。

Caché Nuget ローカル・リポジトリの構成

パッケージ・マネージャを構成し、ローカルの Nuget リポジトリを見つけ出すには、以下の手順を実行します。

  1. ディレクトリを Nuget リポジトリとして作成します。これに Nuget Repository などの名前を指定します。これは好きな場所に置くことができます。お勧めの場所は <yourdoclibraryVS2013>\Projects です (既定で Visual Studio がプロジェクトを保管する場所です)。

  2. ファイル <installdir>\dev\dotnet\bin\v4.0.30319\CacheEF\Nuget\InterSystems.Data.Entity6.4.5.0.0.nupkg をコピーして、Nuget リポジトリのディレクトリに貼り付けます。[OK] をクリックします。

  3. Visual Studio で、[プロジェクト][Nuget パッケージの管理]→[設定]→[パッケージ マネージャー]→[パッケージ ソース] の順に選択します。

  4. プラス記号 (+) をクリックします。InterSystems.Data.Entity6.4.5.0.0.nupkg を含むパスを入力します。[OK] をクリックします。

Entity Framework の開始

このセクションでは、Entity Framework を開始するための 3 つの方法を説明します。

  • Code First — データ・クラスの定義から開始し、クラス・プロパティからデータベースを生成します。

  • Database First Database First — 既存のデータベースから開始します。"サンプル・データベースの設定" セクションの手順に従うことにより、データベースを設定できます。続けて、Entity Framework を使用して、そのデータベースのフィールドに基づいて Web アプリケーションのコードを生成します。

  • Model First Model First — エンティティとリレーションシップを示すデータベース・モデルを作成することから開始します。その後、モデルからデータベースを生成します。

以下のセクションでは、これらの各方法の例が示されています。

Code First

このセクションでは、データ・クラスを定義するコードを作成し、クラス・プロパティからテーブルを生成する方法の例を示します。このセクションの例は、EntityFrameworkTutorial.net (http://www.entityframeworktutorial.net/code-first/simple-code-first-example.aspxOpens in a new tab) の Entity Framework のチュートリアルに基づいています。

  1. [ファイル][新規作成][プロジェクト] の順に選択して、Visual Studio 2013 で新しいプロジェクトを作成します。Visual C#コンソール・アプリケーションのテンプレートをハイライト表示して、プロジェクトの名前を入力します (CodeStudents など)。[OK] をクリックします。

  2. Caché Entity Framework Provider をプロジェクトに追加して、[ツール][Nuget パッケージ マネージャ][ソリューション用の Nuget パッケージの管理] の順にクリックします。[オンライン][パッケージ ソース] の順に展開します。[Caché Entity Framework Provider 6] が表示されます。[インストール][OK][同意する] の順にクリックします。インストールの完了を待機し、[閉じる] をクリックします。

  3. [ビルド][ソリューションのビルド] の順に選択して、プロジェクトをコンパイルします。

  4. プロジェクトの接続先のシステムを App.config ファイル内で以下のように特定して、プロジェクトに指定します。[ソリューション・エクスプローラ] ウィンドウから、App.config ファイルを開きます。<entityFramework> セクションの後の <configuration> セクションの最後のセクションとして、<connectionStrings> セクション (ここに示す例と同様のもの) を追加します。

    Note:

    サーバ、ポート、ネームスペース、ユーザ名、およびパスワードが構成に対して正しいことを確認します。

    <connectionStrings>
       <add 
          name="SchoolDBConnectionString" 
          connectionString="SERVER = localhost;
             NAMESPACE = USER;
             port=1972;
             METADATAFORMAT = mssql;
             USER = _SYSTEM;
             password = SYS;
             LOGFILE = C:\\Users\\Public\\logs\\cprovider.log;
             SQLDIALECT = cache;"
          providerName="InterSystems.Data.CacheClient"
       />
    </connectionStrings>
    
  5. Program.cs ファイルで、以下を追加します。

    using System.Data.Entity;
    using System.Data.Entity.Validation;
    using System.Data.Entity.Infrastructure;
    
  6. クラスを定義します。

    public class Student
    {
       public Student()
       {
       }
       public int StudentID { get; set; }
       public string StudentName { get; set; }
       public DateTime? DateOfBirth { get; set; }
       public byte[] Photo { get; set; }
       public decimal Height { get; set; }
       public float Weight { get; set; }
       public Standard Standard { get; set; }
    }
    
    public class Standard
    {
       public Standard()
       {
       }
       public int StandardId { get; set; }
       public string StandardName { get; set; }
       public ICollection<Student> Students { get; set; }
    }
    
    public class SchoolContext : DbContext
    {
       public SchoolContext() : base("name=SchoolDBConnectionString")
       {
       }
       public DbSet<Student> Students { get; set; }
       public DbSet<Standard> Standards { get; set; }
    }
    

    クラス SchoolContextApp.config の接続を指していることを確認します。

  7. コードを Main に追加します。

    using (var ctx = new SchoolContext())
    {
       Student stud = new Student() { StudentName = "New Student" };
       ctx.Students.Add(stud);
       ctx.SaveChanges();
    }
    
  8. コンパイルして実行します。

ネームスペース (この場合は USER) を確認します。dbo.Standardsdbo.Students (新しい生徒が追加されています)、および dbo._MigrationHistory (テーブル作成に関する情報が含まれています) という 3 つのテーブルが作成されます。

サンプル・データベースの設定

"Database First" セクションで使用するサンプル・データベースを設定する場合は、このセクションの手順に従います。これらの手順により、サンプル・データベース CreateNorthwindEFDB.sql を設定してロードします。

  1. 管理ポータルで、[システム][構成][ネームスペース] の順に選択してから [新規ネームスペースの作成] をクリックします。

  2. ネームスペースに NORTHWINDEF という名前を指定します。

    1. [グローバルに既存のデータベースを選択] で、[新規ネームスペースの作成] をクリックします。データベースとして NORTHWINDEF と入力し、ディレクトリとして <installdir>\mgr\EFdatabase と入力します。[次] をクリックして、[完了] をクリックします。

    2. [ルーチンに既存のデータベースを選択] で、ドロップダウン・リストから [NORTHWINDEF] を選択します。

    3. [保存] をクリックします。

  3. 管理ポータルで、[システム][構成][SQL およびオブジェクトの設定][一般SQL設定] の順に選択します。

    1. [SQL] タブで、[既定の SQL スキーマ名]dbo に設定します。

    2. [SQL] タブで、[区切り識別子をサポート] を選択します (既定ではオンになっています)。

    3. DDL タブで、すべての項目を選択します。

    4. [保存] をクリックします。

  4. [システム][構成][SQL およびオブジェクトの設定]→[TSQL 互換性設定] の順に選択します。

    1. [言語][MSSQL] に設定します。

    2. [QUOTED_IDENTIFIER][オン] に設定します。

    3. [保存] をクリックします。

  5. ターミナル・ウィンドウで、以下によって新しいネームスペースに変更します。

    zn “NORTHWINDEF”
    
  6. データベースの設定が今回初めてではない場合、以下によって既存のデータを削除します。

    do $SYSTEM.OBJ.DeleteAll("e") d Purge^%apiSQL()
    
  7. まだ実行していない場合は、Unzip プログラムを使用して、installdir\dev\dotnet\bin\v4.0.30319\CacheEF.zip から CacheEF というフォルダにファイルを抽出します。

  8. ddl をロードするには、以下を入力します。

    do $SYSTEM.SQL.DDLImport("MSSQL","_system","<installdir>\dev\dotnet\bin\v4.0.30319\CacheEF\CreateNorthwindEFDB.sql")
    

[サーバ・エクスプローラ] ウィンドウで、Caché サーバ・エントリを展開することで、NorthwindEF のデータベース要素 (テーブル、ビュー、関数、プロシージャ) を表示できます。各要素を調べ、テーブルおよびビューのデータを取得し、関数およびプロシージャを実行できます。要素を右クリックして [編集] を選択すると、スタジオが開き、対応するクラスおよび要求された要素に関する場所 (該当する場合) が示されます。

Database First

Database First の方法を使用するには、既存のデータベースから開始し、Entity Framemaker を使用して、そのデータベースのフィールドに基づいて Web アプリケーションのコードを生成します。

  1. [ファイル][新規作成][Visual C#] タイプの [プロジェクト][コンソール アプリケーション][OK] の順に選択して、Visual Studio 2013 で新しいプロジェクトを作成します。

  2. [ツール][NuGet パッケージ マネージャー][ソリューション用の Nuget パッケージの管理] の順にクリックします。[オンライン][パッケージ・ソース] の順に展開します。[Caché Entity Framework Provider 6] が表示されます。[インストール][OK][ライセンスに同意する][閉じる] の順にクリックします。

  3. [ビルド][ソリューションのビルド] の順に選択して、プロジェクトをコンパイルします。

  4. [プロジェクト][新しい項目の追加][Visual C# アイテム][ADO.NET エンティティ データ モデル] の順に選択します。モデルに名前を指定します。ここでは、既定の Model1 を使用します。[追加] をクリックします。

  5. [エンティティ データ モデル ウィザード] で以下の手順を実行します。

    1. [データベースからの EF デザイナ][次へ] の順に選択します。

    2. [データ接続の選択] 画面の [データ接続] フィールドは、既に Northwind データベースになっているはずです。機密データの質問に対しては、[含める] または [除外する] のどちらを選択してもかまいません。

    3. 画面の下部で、接続の設定名を定義できます。既定は localhostEntities です。この名前は後で使用されます。

    4. [データベースのオブジェクトおよび設定の選択] 画面の [モデルにどのデータベース オブジェクトを含めますか?] という質問に、すべてのオブジェクト ([テーブル][ビュー]、および [ストアド・プロシージャと関数]) を選択して回答します。これには、すべての Northwind テーブルが含まれます。

    5. [完了] をクリックします。

    6. 数秒経つと、[セキュリティに関する警告] が表示されます。[OK] をクリックし、テンプレートを実行します。

    7. Visual Studio により、多くの警告が含まれたエラー・リストが表示されることがありますが、無視できます。

  6. モデル名が Model1 の場合、Visual Studio により、Model1.edmx 下に複数のファイルが生成されます。これには、UI 図 (Model1.edmx 自体)、Model1.tt 下のテーブルを表すクラス、Model1.Context.ttModel1.Context.cs のコンテキスト・クラス localhostEntities が含まれます。

    [ソリューション・エクスプローラ] ウィンドウで、Model1.Context.cs を検査できます。コンストラクタ Constructer public localhostEntities() : base("name=localhostEntities") は、App.Config 接続文字列を指します。

    <connectionStrings>
       <add 
          name="localhostEntities"
          connectionString="metadata=res://*/Model1.csdl|
                res://*/Model1.ssdl|
                res://*/Model1.msl;provider=InterSystems.Data.CacheClient;
             provider connection string=&quot;
             ApplicationName=devenv.exe;
             ConnectionLifetime=0;
             ConnectionTimeout=30;
             ConnectionReset=False;
             Server=localhost;
             Namespace=NORTHWINDEF;
             IsolationLevel=ReadUncommitted;
             LogFile=C:\Users\Public\logs\cprovider.log;
             MetaDataFormat=mssql;
             MinPoolSize=0;
             MaxPoolSize=100;
             Pooling=True;
             PacketSize=1024;
             Password=SYS;
             Port=1972;
             PreparseCacheSize=200;
             SQLDialect=cache;
             Ssl=False;
             SoSndBuf=0;
             SoRcvBuf=0;
             StreamPrefetch=0;
             TcpNoDelay=True;
             User=_SYSTEM;
             WorkstationId=DMITRY1&quot;" 
          providerName="System.Data.EntityClient" 
       />
    </connectionStrings>
    
  7. [ビルド][ソリューションのビルド] の順に選択して、プロジェクトをコンパイルします。

以下に、Program.cs 内の Main() に貼り付けることができる 2 つのプログラムのサンプルを示します。

顧客リストは以下を使用して検索できます。

using (var context = new localhostEntities()) {
   var customers = context.Customers;
   foreach (var customer in customers) {
      string s = customer.CustomerID + '\t' + customer.ContactName;
   }
}

顧客 ID の注文リストは以下を使用して取得できます。

using (var context = new localhostEntities()) {
   var customerOrders = from c in context.Customers
      where (c.CustomerID == CustomerID)
         select new { c, c.Orders };

   foreach (var order in customerOrders) {
      for (int i = 0 ; i < order.Orders.Count; i++) {
         var orderElement = order.Orders.ElementAt(i);
         string sProduct = "";
         //Product names from OrderDetails table 
         for (int j = 0; j < orderElement.OrderDetails.Count; j++)  
         {
            var product = orderElement.OrderDetails.ElementAt(j);
            sProduct += product.Product.ProductName;
            sProduct += ",";
         }
         string date = orderElement.OrderDate.ToString();
      }
   }
}

Model First

Model First アプローチを使用するには、"Database First" のセクションで作成した図に基づいてデータベース・モデルを生成します。その後、モデルからデータベースを生成します。

この例では、2 つのエンティティを含むデータベースを作成する方法を示します。

  1. Entity Framework の UI edmx 図である Model1.edmx を確認します。図の空白領域で、右クリックして [プロパティ] を選択します。

  2. [DDL 生成テンプレート][SSDTLtoCacheSQL.tt] に変更します。

  3. プロジェクトをコンパイルします。

  4. 図の空白領域で、右クリックして [モデルからのデータベースの生成] を選択します。 DDL の生成後、[完了] をクリックします。

  5. Studio により、ファイル Model1.edmx.sql が作成され、開かれます。

  6. ターミナルで以下のコマンドを実行して、Caché にテーブル定義をインポートします。

      do $SYSTEM.SQL.DDLImport("MSSQL","_system","C:\\<myPath>\\Model1.edmx.sql")
FeedbackOpens in a new tab