Skip to main content

This documentation is for an older version of this product. See the latest version of this content.Opens in a new tab

Entity Framework Provider の使用法

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

Entity Framework のシステム要件、インストール、および設定の詳細は、“構成と要件” の章の “Entity Framework Provider の設定” を参照してください。

この章では、Entity Framework を開始するための 3 つの方法を説明します。

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

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

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

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

Code First

このセクションでは、データ・クラスを定義するコードを作成してクラス・プロパティからテーブルを生成する方法の例を示します。

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

  2. InterSystems Entity Framework Provider をプロジェクトに追加して、[ツール][NuGet パッケージ マネージャー][ソリューションの NuGet パッケージの管理] の順にクリックします。[オンライン][パッケージ ソース] の順に展開します。[InterSystems 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=51774;
             METADATAFORMAT = mssql;
             USER = _SYSTEM;
             password = SYS;
             LOGFILE = C:\\Users\\Public\\logs\\cprovider.log;
             SQLDIALECT = iris;"
          providerName="InterSystems.Data.IRISClient"
       />
    </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

以下の例で使用しているデータベースの設定方法は、この章の最後にある “サンプル・データベースの設定” を参照してください。

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

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

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

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

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

  5. [Entity Data Model ウィザード] で以下の手順を実行します。

    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.IRISClient;
             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=51774;
             PreparseIrisSize=200;
             SQLDialect=iris;
             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 生成テンプレート]SSDTLtoIrisSQL.tt に変更します。

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

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

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

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

      do $SYSTEM.SQL.Schema.ImportDDL("MSSQL","_system","C:\\<myPath>\\Model1.edmx.sql")

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

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. ターミナル・ウィンドウで、以下によって新しいネームスペースに変更します。

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

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

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

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

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

FeedbackOpens in a new tab