1 / 25

MVC の M

MVC の M. あおい情報システム株式会社 小野 修司 Microsoft MVP for ASP.NET/IIS blogonos.wordpress.com twitter.com/ onos. アジェンダ. MVC の M として何を用いるか Entity Framework 4.1 CodeFirst OData 連携. Entity Framework 4.1 CodeFirst. Entity Framework 4.1 CodeFirst. demo. POCO クラス定義. データ構造を意識したクラス定義 主キー

lilka
Download Presentation

MVC の M

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. MVC の M あおい情報システム株式会社 小野 修司 MicrosoftMVPforASP.NET/IIS blogonos.wordpress.comtwitter.com/onos

  2. アジェンダ • MVC の M として何を用いるか • EntityFramework4.1CodeFirst • OData 連携

  3. EntityFramework4.1CodeFirst

  4. EntityFramework4.1CodeFirst demo ...

  5. POCO クラス定義 • データ構造を意識したクラス定義 • 主キー • ナビゲーションプロパティ、外部キー • レイジーローディング • 計算項目 • クラス定義=テーブル設計 • 設定に勝る規約(ConventionoverConfiguration) • 属性による設定 • FluentAPI による設定(DbContext 内)

  6. FluentAPI の例:[Required] public class GroupContext: DbContext { public DbSet<Member> Members { get; set; } public DbSet<Category> Categories { get; set; } protected override voidOnModelCreating(DbModelBuildermodelBuilder) { modelBuilder.Entity<Member>() .Property(m => m.Name).IsRequired(); } } #DB定義は同じになるが検証等のプログラム上の処理は異なる

  7. DbContext定義 • クラスと DB のマッピングを設定 • 設定に勝る規約(CoC) • FluentAPI により詳細な設定

  8. 接続文字列定義 • 利用(構築)する DB の場所を設定 • 設定に勝る規約(CoC) • 該当する接続文字列がない場合、 SQLExpress インスタンスを利用 <add name=“GroupContext“ connectionString="Data Source=|DataDirectory|\Group.sdf" providerName="System.Data.SqlServerCe.4.0"/>

  9. データベースの初期化 • Initializerクラス • DBの構築/修正 • 基底クラスにより設定 • POCOクラスの定義変更を即座にDBに反映可能 • 項目の初期値設定 • Seedメソッドのオーバーライド • 常に同じデータを設定-テスト環境として有効 • パッケージの初期値投入

  10. スキャッフォールディング • コントローラー/ビューを一括追加 • DbContext(コードファースト)、ObjectContext(DBファースト/モデルファースト)を利用可能 • コントローラーでのデータの扱い方の参考となる • [参考]MvcScaffolding • NuGet からインストール • リポジトリパターン/ユニットテストコードも生成可

  11. データ取得 ○単一データ取得 db.Members.Find(id); ○複数データ取得(リンクなし) db.Members.ToList(); ○複数データ取得(一括ローディング) db.Members.Include(m => m.Category).ToList();

  12. データ追加/更新/削除 ○データ追加 db.Members.Add(member); db.SaveChanges(); ○データ更新(Attachして更新状態に変更) db.Entry(member).State = EntityState.Modified; db.SaveChanges(); ○データ削除 Member member= db.Members.Find(id); db.Members.Remove(member); db.SaveChanges();

  13. DropDownListの使い方 ○コントローラーで SelectList を作成し、ViewBag.フィールド名 に詰め込む ViewBag.CategoryID = new SelectList(db.Categories, "CategoryID", "Name"); ○ビューではフィールド名とオプションラベルのみ指定 @Html.DropDownList("CategoryID", String.Empty)

  14. バリデーション • 属性による設定 • スキャッフォールドで作成されるビューでは JQuery.Validate を利用しクライアント側で検証 • クラスレベルでの関連チェック • IValidatableObject を実装する • ValidationResult を yield で返す

  15. 同時実行制御 • 制御用の項目を作成 • Timestamp 属性を指定 • エラーハンドリング • View に制御用項目の Hidden フィールドを追加 • DbUpdateConcurrencyException をキャッチ

  16. 実行環境 • .NETFramework4 • MVC3ToolsUpdate のテンプレート • MVC3 の dll を参照済み • EF4.1 の dll を参照済み • SQLServerCompactを利用可 • 配置可能な依存関係の追加 • MVC3、SQLServerCompact • EF4.1 はローカルコピーを True に

  17. OData

  18. WCFDataServicesとの連携 demo ...

  19. WCFDataServices • 標準でODataを利用 • デフォルトのデータ表現はAtomPub • JSONにはHTTP要求ヘッダーにより対応

  20. ODataクライアント • DataServiceContextを利用 • サービス参照の追加により自動生成 • LINQ ベースでデータを操作 • MetaData による検証属性の付加が可能

  21. まとめ

  22. MVC の 「 M 」 • 用意されているデータアクセス機能をいかに活用するか • DbContext • ObjectContext • DataServiceContext.. . • LINQ によるデータ抽出 • データの追加/更新方法は Context により異なる

  23. 参照リンク

  24. EntityFramework • http://msdn.microsoft.com/en-us/data/gg192989 • http://www.asp.net/entity-framework/tutorials • OData • http://www.odata.org/ • http://msdn.microsoft.com/en-us/data/hh237663 • WCFDataServices • http://msdn.microsoft.com/ja-jp/library/cc668792

More Related