database firstでクラスを作成する方法
■プロジェクトの作成とサンプルDBの追加
C#のプロジェクトの新規作成します。
EntityFrameworkの機能にフォーカスするために、
ここではコンソールアプリケーションを選択します。
便宜上、プロジェクト名は、EFSample という名前で話を進めます。
プロジェクトができたら、次に、App_Data フォルダをプロジェクトに新規追加します。
作成されたVisual StudioのプロジェクトのApp_Dataフォルダに、エクスプローラから Northwnd.mdf と Northwnd_log.ldf をドロップします。
ファイルが App_Dataフォルダにコピーされると同時に、プロジェクトに追加されます。
便宜上、プロジェクト名は、EFSample という名前で話を進めます。
プロジェクトができたら、次に、App_Data フォルダをプロジェクトに新規追加します。
作成されたVisual StudioのプロジェクトのApp_Dataフォルダに、エクスプローラから Northwnd.mdf と Northwnd_log.ldf をドロップします。
ファイルが App_Dataフォルダにコピーされると同時に、プロジェクトに追加されます。
■Entity Data Model 作成
-
プロジェクトEFSample に Models フォルダを作成します。
- Model フォルダを右クリックし、[新しい項目の追加]を選びます。
- 新しい項目の追加ダイアログが表示されますので、[ADO.NET Entity Data Model ]を選択し、名前に "NorthwindContext"と入力し、[追加]ボタンを押します。
- [データベースからCode First] を選択し、次へ ボタンをクリックします。
※ 変な名前ですね。もっと良い訳はなかったんでしょうか?
- 新しい接続ボタンをおして、設定のプロパティダイアログで、データソースの 変更で、Microsoft SQL Server データベースファイル を選びます。
- データベースのファイル名では、先ほどのNorthwnd.mdf を指定し、OK ボタンを押します。
- ダイアログの下の入力欄に、"NorthwindConnection" と入力し、次へを押します。
- 「ファイルをプロジェクトにコピーし、接続を変更しますか?」 と聞いてきますが、いいえを選択します。
※ はっきり言ってこのメッセージは不要ですね。はいを押すとプロジェクトの直下に mdfファイルがコピーされてしまいます。 - 次のウィザード画面では、すべてのテーブルをモデルに含めるので、 テーブルにチェックを入れます。 さらに、「生成されたオブジェクトの名前を複数化または単数化する」にチェックし、 完了ボタンを押します。
- Models フォルダに、NorthwindContext.cs と、各テーブルに対応した C#のソースフィルが追加されていることを確認します。
実際に、これらのソースファイルに中身を確認してください。 いくつかの属性が追加されてはいますが、普通のC#のクラスである ことを確認できると思います。
NorthwindContext.cs には、Categories や Customersといった テーブル名を複数形にしたプロパティが定義されています。 EntityFramework では、これらのプロパティを使い、テーブルにアクセス することになります。
次のバージョンのEntityFrameworkでは、EDMXファイル([データベースからEF Degigner]で作成される)がサポートされないことがアナウンスされています。
そのため、このシリーズでは、EDMXを使わずに、[データベースからCode First]で、エンティティモデル を作成しています。Database Firstでも問題なくプログラムを書くことができます。
■Productsテーブルの参照
Productsテーブルからデータを取得してみましょう。
プログラムでは、先ほど作成した Product「EntityFrameworkエンティティクラス」を 経由して、Productsテーブルの各カラムにアクセスすることになります。 さっそく、このProductsテーブルにアクセスするコードを書いてみます。
プログラムでは、先ほど作成した Product「EntityFrameworkエンティティクラス」を 経由して、Productsテーブルの各カラムにアクセスすることになります。 さっそく、このProductsテーブルにアクセスするコードを書いてみます。
- using LinqToEntitySample.Models;
- ...
- static void Main(string[] args) {
- using (var db = new NorthwindContext()) {
- var query = from product in db.Products
- select product;
- foreach (Product p in query)
- Console.WriteLine("{0} | {1} | {2} | {3}",
- p.ProductID, p.ProductName, p.UnitPrice, p.QuantityPerUnit);
- Console.ReadLine();
- }
- }
実行すると、
- 1 | Chai | 18.0000 | 10 boxes x 20 bags
- 2 | Chang | 19.0000 | 24 - 12 oz bottles
- 3 | Aniseed Syrup | 10.0000 | 12 - 550 ml bottles
- 4 | Chef Anton's Cajun Seasoning | 22.0000 | 48 - 6 oz jars
- 5 | Chef Anton's Gumbo Mix | 21.3500 | 36 boxes
- 6 | Grandma's Boysenberry Spread | 25.0000 | 12 - 8 oz jars
- 7 | Uncle Bob's Organic Dried Pears | 30.0000 | 12 - 1 lb pkgs.
- .
- .
- .
と表示され、Productsテーブルからデータを取得できたことを確認できます。
NorthwindContext クラスは、[データベースからCode First]の追加で自動生成されたクラ スで、NorthwindContext.csで以下のように定義されています。
- public partial class NorthwindContext : DbContext {
- public NorthwindContext()
- : base("name=NorthwindContext") {
- }
- public virtual DbSet Categories { get; set; }
- public virtual DbSet CustomerDemographics { get; set; }
- public virtual DbSet Customers { get; set; }
- public virtual DbSet Employees { get; set; }
- public virtual DbSet Order_Details { get; set; }
- public virtual DbSet Orders { get; set; }
- public virtual DbSet Products { get; set; }
- public virtual DbSet Regions { get; set; }
- 以下省略
先ほど利用した Productsプロパティも定義されていますね。 EntityFrameworkでは、このDbContextクラスの派生クラスのインスタンスを生成 することで、データベースにアクセスすることが可能になります。
先ほどのクエリ式では、Productsテーブルから全てのデータを取得しています。各カラムの値は、プロパティとしてアクセスできます。
なお、Productsテーブルを示すNorthwindContextクラスのプロパティ名はProductsと複数形になっている点に注目してください。単数形のProductは、1行分を表すクラスです。
0 件のコメント:
コメントを投稿