community open day 2013 jp - ef codefirst demo
TRANSCRIPT
自己紹介サヴロウ
・医療系のシステム開発してます
・コミュニティ“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
概念モデルはどうやって作る?
コードファースト手順1
(1)EntityFrameworkをインストール
・[ツール]-[ライブラリパッケージマネージャー]-
[パッケージマネージャーコンソール]で以下を入力
Install-Package EntityFramework
※Ver5.0.0がインストールされます。
※最新版を入れたい方は最後に[-Pre]を入力
コードファースト手順2
(2)POCOでエンティティモデルを作成
(3)エンティティをデータベースに接続するコンテキストクラスを作成
→System.Data.Entity.DbContext
(4)実行
アノテーション②
詳しくは・・・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
リンク他
・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