community open day 2013 jp - ef codefirst demo

25
Entity FrameworkCode Firstをやってみよう Community Open Day 2013 サヴロウ

Upload: okumar-savurou

Post on 14-Jul-2015

1.019 views

Category:

Technology


1 download

TRANSCRIPT

Entity FrameworkでCode Firstをやってみよう

Community Open Day 2013

サヴロウ

自己紹介サヴロウ

・医療系のシステム開発してます

・コミュニティ“SQLWorld”

にて活動を行っています。

・SQLWorld

5/21(火) SQLを書いてみよう(ハンズオン)

7/20(土) 内容調整中・音楽ユニット「フライパンズ」のベース&アレンジ

・ライブ予定

5/12(日)高槻アクトアモーレ

5/26(日)高槻アクトアモーレ

6/16(土)神戸北野HAPPY LAURA

Twitter: savurou36

EntiryFrameworkって何?

・ADO.NET Entity Framework(以降、Entity Framework、EF)とは、.NET Framework 3.5からADO.NETに追加された、新しい概念に基づくデータ・アクセス技術である。

・最新バージョンは6 Alpha 3

→NuGetで入手可能。

先にデータモデルの説明を…

アプリケーションで扱うデータをモデル化したもので、データベースのテーブルなどには依存しないモデル

概念モデル

論理モデル

概念モデルをデータの表現形式にあわせて変換したもの*一般的にはリレーショナルデータベースが使われる

ので、テーブル、主キー外部キーなどに変換

リレーショナルデータベースにあわせてインデックスの設計や、パーティション分割などを行う

物理モデル

概念モデルと論理モデルの違いは何?

概念モデルと論理モデルの違いの例

例)多対多のパターン一人の学生は複数の講義を受講し、一つの講義には複数の学生が受講する。

概念モデル

概念モデル

論理モデル

論理モデルに落とし込むには中間テーブルを作成する必要がある

→インピーダンスミスマッチ

ORマッパーとは何が違う?

ORマッパーの場合

概念モデル

EntityFrameworkの場合

概念モデル

概念モデル側に受講者エンティティを作成

概念モデルはそのままでプログラミングすることが可能

EntityFramework概要

概念モデル

論理モデル

マッピング

EntityFrameworkに基づくデータアクセス

アクセスの仕方

・ LINQ to Entities

→LINQ to SQLではない

・通常のエンティティモデルとして

→For Eachで回せる

CSDL

MSL

SSDL

概念モデルはどうやって作る?

DEMO

EDMウィザード

→ADO.NET Entity Data Modelの作成

自動生成されたコードを見てみる

→POCO(Plane Old CLR Objects)

EDMモデルの中身を見る

・自動でコードが作られるが、以外にもプレーンなクラスができている

EDMウィザードを使わずに、コードから書いていこう!

コードファースト

コードファースト手順1

(1)EntityFrameworkをインストール

・[ツール]-[ライブラリパッケージマネージャー]-

[パッケージマネージャーコンソール]で以下を入力

Install-Package EntityFramework

※Ver5.0.0がインストールされます。

※最新版を入れたい方は最後に[-Pre]を入力

コードファースト手順2

(2)POCOでエンティティモデルを作成

(3)エンティティをデータベースに接続するコンテキストクラスを作成

→System.Data.Entity.DbContext

(4)実行

DEMO

・NuGetでEntityFrameworkをインストール

・POCOでエンティティモデルを作成

・DbContextを作成

・実行

・データの検索と更新

アノテーション①

カラムが作成されるルールは?

・IDという名称はPKEYになる

・他のエンティティへの参照があれば、

基本FKEYになる

ある程度指定したい場合はアノテーションを使う

アノテーション②

詳しくは・・・http://msdn.microsoft.com/ja-JP/data/jj591583

・各プロパティの前に属性を書く

<Key> PKEYになります

<Column> カラム名を指定できます。

<ForeignKey> 外部キーの指定ができます。

<MaxLength> 最大文字数の指定ができます。

<Required> Not Nullになります。

<NotMapped> カラムを作りません。

アノテーション③

詳しくは・・・http://www.atmarkit.co.jp/fdotnet/ef4basic/ef4codefirst03/ef4codefirst03_01.html

・更なるカスタマイズをしたい場合は、

Fluent API を使う。

データベースのマイグレーション①

・仕様変更などで、既存のデータはそのままで、カラム追加やテーブル追加に対応

(1)NuGetでインストール

(2)Configurationファイルができるので

にする

Enable-Migrations

AutomaticMigrationsEnabled = True

データベースのマイグレーション②

(3)Configurationファイルに初期値を設定

→親子関係のデータは親子関係のオブジェクト

を作成して、親を入れる

(4)DatabaseInitializerをセットする

→アプリケーションのNew時に入れるのが

ベターか

メモ:DbSetのFindの使い方

DEMO

・クラス図の説明

・NuGetでMigrationを有効にする

・Configurationの設定

・DatabaseInitializerの設定

・データの追加

・データの更新

・Annotation

・Enum

・DbSetのFind

クラス図

クラス図(仕様変更バージョン)

紹介できない数々の機能

・非同期対応

・ストアドプロシージャもCallできます

・変更の追跡もできます

・その他

リンク他

・ADO.NET Team Blog

http://blogs.msdn.com/b/adonet/

・Entity Framework 4.1入門(@IT)

http://www.atmarkit.co.jp/fdotnet/ef4basic/index/index.html#ef41

・ADO.NET Entity Framework 4.1 における Code First

http://msdn.microsoft.com/ja-jp/magazine/hh126815.aspx

最後に

・実用的か? → そろそろ使える!

・使うなら? → 小規模プロジェクト!

プロトタイプ!

どんどんEntityFrameworkは進化していきます!

ご清聴ありがとうございました