SlideShare ist ein Scribd-Unternehmen logo
1 von 25
mvcConf @:Japan
~ ASP.NET MVC ブート キャンプ ~




                MVC の M
            あおい情報システム株式会社
                小野 修司
                 Microsoft MVP for ASP.NET/IIS
          blogonos.wordpress.com twitter.com/onos
アジェンダ
 MVC の M として何を用いるか

 Entity Framework 4.1 CodeFirst

 OData 連携




                                   2
Entity Framework 4.1 CodeFirst


                                 3
Entity Framework 4.1 CodeFirst




demo ...

                                 4
POCO クラス定義
 データ構造を意識したクラス定義
   主キー
   ナビゲーションプロパティ、外部キー
   レイジーローディング
   計算項目

 クラス定義=テーブル設計
 設定に勝る規約(Convention over Configuration)
 属性による設定
 Fluent API による設定(DbContext 内)
                                           5
Fluent API の例:[Required]
public class GroupContext : DbContext
{
    public DbSet<Member> Members { get; set; }
    public DbSet<Category> Categories { get; set; }

    protected override
       void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Member>()
              .Property(m => m.Name).IsRequired();
    }
}

#DB定義は同じになるが検証等のプログラム上の処理は異なる
                                                           6
DbContext 定義
 クラスと DB のマッピングを設定
 設定に勝る規約(CoC)
 Fluent API により詳細な設定




                        7
接続文字列定義
 利用(構築)する DB の場所を設定
   設定に勝る規約(CoC)
   該当する接続文字列がない場合、 SQLExpress
    インスタンスを利用

<add name=“GroupContext“
       connectionString="Data Source=|DataDirectory|Group.sdf"
       providerName="System.Data.SqlServerCe.4.0"/>



                                                                  8
データベースの初期化
 Initializerクラス
  DBの構築/修正
   基底クラスにより設定
   POCOクラスの定義変更を即座にDBに反映可能

  項目の初期値設定
   Seedメソッドのオーバーライド
   常に同じデータを設定-テスト環境として有効
   パッケージの初期値投入
                              9
スキャッフォールディング
 コントローラー/ビューを一括追加
 DbContext(コードファースト)、ObjectContext
  (DBファースト/モデルファースト)を利用可能
 コントローラーでのデータの扱い方の参考となる


 [参考] MvcScaffolding
  NuGet からインストール
  リポジトリパターン/ユニットテストコードも生成可
                                      10
データ取得
○単一データ取得
   db.Members.Find(id);


○複数データ取得(リンクなし)
   db.Members.ToList();


○複数データ取得(一括ローディング)
   db.Members.Include(m => m.Category).ToList();




                                                   11
データ追加/更新/削除
○データ追加
   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();
                                                    12
DropDownList の使い方
○コントローラーで SelectList を作成し、ViewBag.フィールド名
 に詰め込む

ViewBag.CategoryID
  = new SelectList(db.Categories, "CategoryID", "Name");


○ビューではフィールド名とオプションラベルのみ指定

@Html.DropDownList("CategoryID", String.Empty)




                                                           13
バリデーション
 属性による設定
 スキャッフォールドで作成されるビューでは
  JQuery.Validate を利用しクライアント側で検証

 クラスレベルでの関連チェック
 IValidatableObject を実装する
 ValidationResult を yield で返す

                                   14
同時実行制御
 制御用の項目を作成
 Timestamp 属性を指定

 エラーハンドリング
 View に制御用項目の Hidden フィールドを追加
 DbUpdateConcurrencyException をキャッチ


                                       15
実行環境
 .NET Framework 4

 MVC 3 Tools Update のテンプレート
  MVC 3 の dll を参照済み
  EF 4.1 の dll を参照済み
  SQL Server Compactを利用可

 配置可能な依存関係の追加
  MVC 3、SQL Server Compact
  EF 4.1 はローカルコピーを True に
                               16
OData


        17
WCF Data Servicesとの連携



demo ...

                        18
WCF Data Services
 標準でODataを利用
  デフォルトのデータ表現はAtomPub
  JSONにはHTTP要求ヘッダーにより対応




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




                            20
まとめ


      21
MVC の 「 M 」
 用意されているデータアクセス機能をいか
  に活用するか
  DbContext
  ObjectContext
  DataServiceContext . . .

 LINQ によるデータ抽出
 データの追加/更新方法は Context により異なる

                                22
参照リンク

        23
 Entity Framework
  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

 WCF Data Services
  http://msdn.microsoft.com/ja-jp/library/cc668792

                                                      24
© 2011 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.
The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the
          part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.

Weitere ähnliche Inhalte

Andere mochten auch

Andere mochten auch (9)

20111203
2011120320111203
20111203
 
20070310
2007031020070310
20070310
 
20120425
2012042520120425
20120425
 
20120609
2012060920120609
20120609
 
20120128
2012012820120128
20120128
 
4. многолетнемерзлые породы
4. многолетнемерзлые породы4. многолетнемерзлые породы
4. многолетнемерзлые породы
 
20120616
2012061620120616
20120616
 
20121215
2012121520121215
20121215
 
20140322
2014032220140322
20140322
 

Ähnlich wie 20110607

【17-C-2】 クラウド上でのエンタープライズアプリケーション開発
【17-C-2】 クラウド上でのエンタープライズアプリケーション開発【17-C-2】 クラウド上でのエンタープライズアプリケーション開発
【17-C-2】 クラウド上でのエンタープライズアプリケーション開発lalha
 
Spring mvc
Spring mvcSpring mvc
Spring mvcRyo Asai
 
Azure DevOps Online Vol.3 - Inside Azure Pipelines
Azure DevOps Online Vol.3 - Inside Azure PipelinesAzure DevOps Online Vol.3 - Inside Azure Pipelines
Azure DevOps Online Vol.3 - Inside Azure PipelinesKazushi Kamegawa
 
【改訂版あり】クラウド・ネイティブ時代に最適なJavaベースのマイクロサービス・フレームワーク ~ Helidonの実力を見極めろ!
【改訂版あり】クラウド・ネイティブ時代に最適なJavaベースのマイクロサービス・フレームワーク ~ Helidonの実力を見極めろ!【改訂版あり】クラウド・ネイティブ時代に最適なJavaベースのマイクロサービス・フレームワーク ~ Helidonの実力を見極めろ!
【改訂版あり】クラウド・ネイティブ時代に最適なJavaベースのマイクロサービス・フレームワーク ~ Helidonの実力を見極めろ!オラクルエンジニア通信
 
SpringBootによるDB更新
SpringBootによるDB更新SpringBootによるDB更新
SpringBootによるDB更新iPride Co., Ltd.
 
Entity Framework 6.1.3 + Windows フォーム サンプル アプリケーション構築 手順書
Entity Framework 6.1.3 + Windows フォームサンプル アプリケーション構築手順書Entity Framework 6.1.3 + Windows フォームサンプル アプリケーション構築手順書
Entity Framework 6.1.3 + Windows フォーム サンプル アプリケーション構築 手順書Masaki Takeda
 
Azure Cosmos DB を使った高速分散アプリケーションの設計パターン
Azure Cosmos DB を使った高速分散アプリケーションの設計パターンAzure Cosmos DB を使った高速分散アプリケーションの設計パターン
Azure Cosmos DB を使った高速分散アプリケーションの設計パターンKazuyuki Miyake
 
Let's build a simple app with .net 6 asp.net core web api, react, and elasti...
Let's build a simple app with  .net 6 asp.net core web api, react, and elasti...Let's build a simple app with  .net 6 asp.net core web api, react, and elasti...
Let's build a simple app with .net 6 asp.net core web api, react, and elasti...Shotaro Suzuki
 
ADO.NET Entity Framework
ADO.NET Entity Framework ADO.NET Entity Framework
ADO.NET Entity Framework Microsoft
 
Microsoft Azure SQLマネージド インスタンスのソースとしての利用
Microsoft Azure SQLマネージド インスタンスのソースとしての利用Microsoft Azure SQLマネージド インスタンスのソースとしての利用
Microsoft Azure SQLマネージド インスタンスのソースとしての利用QlikPresalesJapan
 
VSUG Day 2010 Summer - Using ADO.NET Entity Framework
VSUG Day 2010 Summer - Using ADO.NET Entity FrameworkVSUG Day 2010 Summer - Using ADO.NET Entity Framework
VSUG Day 2010 Summer - Using ADO.NET Entity FrameworkAtsushi Fukui
 
ASP.NET MVC 2 ~新機能の紹介~
ASP.NET MVC 2 ~新機能の紹介~ASP.NET MVC 2 ~新機能の紹介~
ASP.NET MVC 2 ~新機能の紹介~Yoshitaka Seo
 
リソーステンプレート入門
リソーステンプレート入門リソーステンプレート入門
リソーステンプレート入門junichi anno
 
Building React, Flutter and Blazor development and debugging environment with...
Building React, Flutter and Blazor development and debugging environment with...Building React, Flutter and Blazor development and debugging environment with...
Building React, Flutter and Blazor development and debugging environment with...Shotaro Suzuki
 
jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発Akira Inoue
 

Ähnlich wie 20110607 (20)

【17-C-2】 クラウド上でのエンタープライズアプリケーション開発
【17-C-2】 クラウド上でのエンタープライズアプリケーション開発【17-C-2】 クラウド上でのエンタープライズアプリケーション開発
【17-C-2】 クラウド上でのエンタープライズアプリケーション開発
 
Clrh 110716 wcfwf
Clrh 110716 wcfwfClrh 110716 wcfwf
Clrh 110716 wcfwf
 
Spring mvc
Spring mvcSpring mvc
Spring mvc
 
Azure DevOps Online Vol.3 - Inside Azure Pipelines
Azure DevOps Online Vol.3 - Inside Azure PipelinesAzure DevOps Online Vol.3 - Inside Azure Pipelines
Azure DevOps Online Vol.3 - Inside Azure Pipelines
 
20050917
2005091720050917
20050917
 
【改訂版あり】クラウド・ネイティブ時代に最適なJavaベースのマイクロサービス・フレームワーク ~ Helidonの実力を見極めろ!
【改訂版あり】クラウド・ネイティブ時代に最適なJavaベースのマイクロサービス・フレームワーク ~ Helidonの実力を見極めろ!【改訂版あり】クラウド・ネイティブ時代に最適なJavaベースのマイクロサービス・フレームワーク ~ Helidonの実力を見極めろ!
【改訂版あり】クラウド・ネイティブ時代に最適なJavaベースのマイクロサービス・フレームワーク ~ Helidonの実力を見極めろ!
 
SpringBootによるDB更新
SpringBootによるDB更新SpringBootによるDB更新
SpringBootによるDB更新
 
Entity Framework 6.1.3 + Windows フォーム サンプル アプリケーション構築 手順書
Entity Framework 6.1.3 + Windows フォームサンプル アプリケーション構築手順書Entity Framework 6.1.3 + Windows フォームサンプル アプリケーション構築手順書
Entity Framework 6.1.3 + Windows フォーム サンプル アプリケーション構築 手順書
 
Mongodb
MongodbMongodb
Mongodb
 
Azure Cosmos DB を使った高速分散アプリケーションの設計パターン
Azure Cosmos DB を使った高速分散アプリケーションの設計パターンAzure Cosmos DB を使った高速分散アプリケーションの設計パターン
Azure Cosmos DB を使った高速分散アプリケーションの設計パターン
 
Let's build a simple app with .net 6 asp.net core web api, react, and elasti...
Let's build a simple app with  .net 6 asp.net core web api, react, and elasti...Let's build a simple app with  .net 6 asp.net core web api, react, and elasti...
Let's build a simple app with .net 6 asp.net core web api, react, and elasti...
 
ADO.NET Entity Framework
ADO.NET Entity Framework ADO.NET Entity Framework
ADO.NET Entity Framework
 
20050903
2005090320050903
20050903
 
Microsoft Azure SQLマネージド インスタンスのソースとしての利用
Microsoft Azure SQLマネージド インスタンスのソースとしての利用Microsoft Azure SQLマネージド インスタンスのソースとしての利用
Microsoft Azure SQLマネージド インスタンスのソースとしての利用
 
VSUG Day 2010 Summer - Using ADO.NET Entity Framework
VSUG Day 2010 Summer - Using ADO.NET Entity FrameworkVSUG Day 2010 Summer - Using ADO.NET Entity Framework
VSUG Day 2010 Summer - Using ADO.NET Entity Framework
 
[Japan Tech summit 2017] DAL 005
[Japan Tech summit 2017] DAL 005[Japan Tech summit 2017] DAL 005
[Japan Tech summit 2017] DAL 005
 
ASP.NET MVC 2 ~新機能の紹介~
ASP.NET MVC 2 ~新機能の紹介~ASP.NET MVC 2 ~新機能の紹介~
ASP.NET MVC 2 ~新機能の紹介~
 
リソーステンプレート入門
リソーステンプレート入門リソーステンプレート入門
リソーステンプレート入門
 
Building React, Flutter and Blazor development and debugging environment with...
Building React, Flutter and Blazor development and debugging environment with...Building React, Flutter and Blazor development and debugging environment with...
Building React, Flutter and Blazor development and debugging environment with...
 
jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発
 

Mehr von 小野 修司 (20)

20100313
2010031320100313
20100313
 
20100224
2010022420100224
20100224
 
20100218 lt
20100218 lt20100218 lt
20100218 lt
 
20100218
2010021820100218
20100218
 
20091207
2009120720091207
20091207
 
20090711
2009071120090711
20090711
 
20090606
2009060620090606
20090606
 
20090418
2009041820090418
20090418
 
20090328
2009032820090328
20090328
 
20090212
2009021220090212
20090212
 
20081003
2008100320081003
20081003
 
20080630
2008063020080630
20080630
 
20080627 2
20080627 220080627 2
20080627 2
 
20080627 1
20080627 120080627 1
20080627 1
 
20080524
2008052420080524
20080524
 
20080213
2008021320080213
20080213
 
20080201
2008020120080201
20080201
 
20071204
2007120420071204
20071204
 
20071030
2007103020071030
20071030
 
20061125
2006112520061125
20061125
 

20110607

  • 1. mvcConf @:Japan ~ ASP.NET MVC ブート キャンプ ~ MVC の M あおい情報システム株式会社 小野 修司 Microsoft MVP for ASP.NET/IIS blogonos.wordpress.com twitter.com/onos
  • 2. アジェンダ  MVC の M として何を用いるか  Entity Framework 4.1 CodeFirst  OData 連携 2
  • 3. Entity Framework 4.1 CodeFirst 3
  • 4. Entity Framework 4.1 CodeFirst demo ... 4
  • 5. POCO クラス定義  データ構造を意識したクラス定義  主キー  ナビゲーションプロパティ、外部キー  レイジーローディング  計算項目  クラス定義=テーブル設計  設定に勝る規約(Convention over Configuration)  属性による設定  Fluent API による設定(DbContext 内) 5
  • 6. Fluent API の例:[Required] public class GroupContext : DbContext { public DbSet<Member> Members { get; set; } public DbSet<Category> Categories { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity<Member>() .Property(m => m.Name).IsRequired(); } } #DB定義は同じになるが検証等のプログラム上の処理は異なる 6
  • 7. DbContext 定義  クラスと DB のマッピングを設定  設定に勝る規約(CoC)  Fluent API により詳細な設定 7
  • 8. 接続文字列定義  利用(構築)する DB の場所を設定  設定に勝る規約(CoC)  該当する接続文字列がない場合、 SQLExpress インスタンスを利用 <add name=“GroupContext“ connectionString="Data Source=|DataDirectory|Group.sdf" providerName="System.Data.SqlServerCe.4.0"/> 8
  • 9. データベースの初期化  Initializerクラス  DBの構築/修正  基底クラスにより設定  POCOクラスの定義変更を即座にDBに反映可能  項目の初期値設定  Seedメソッドのオーバーライド  常に同じデータを設定-テスト環境として有効  パッケージの初期値投入 9
  • 10. スキャッフォールディング  コントローラー/ビューを一括追加  DbContext(コードファースト)、ObjectContext (DBファースト/モデルファースト)を利用可能  コントローラーでのデータの扱い方の参考となる  [参考] MvcScaffolding  NuGet からインストール  リポジトリパターン/ユニットテストコードも生成可 10
  • 11. データ取得 ○単一データ取得 db.Members.Find(id); ○複数データ取得(リンクなし) db.Members.ToList(); ○複数データ取得(一括ローディング) db.Members.Include(m => m.Category).ToList(); 11
  • 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(); 12
  • 13. DropDownList の使い方 ○コントローラーで SelectList を作成し、ViewBag.フィールド名 に詰め込む ViewBag.CategoryID = new SelectList(db.Categories, "CategoryID", "Name"); ○ビューではフィールド名とオプションラベルのみ指定 @Html.DropDownList("CategoryID", String.Empty) 13
  • 14. バリデーション  属性による設定  スキャッフォールドで作成されるビューでは JQuery.Validate を利用しクライアント側で検証  クラスレベルでの関連チェック  IValidatableObject を実装する  ValidationResult を yield で返す 14
  • 15. 同時実行制御  制御用の項目を作成  Timestamp 属性を指定  エラーハンドリング  View に制御用項目の Hidden フィールドを追加  DbUpdateConcurrencyException をキャッチ 15
  • 16. 実行環境  .NET Framework 4  MVC 3 Tools Update のテンプレート  MVC 3 の dll を参照済み  EF 4.1 の dll を参照済み  SQL Server Compactを利用可  配置可能な依存関係の追加  MVC 3、SQL Server Compact  EF 4.1 はローカルコピーを True に 16
  • 17. OData 17
  • 19. WCF Data Services  標準でODataを利用  デフォルトのデータ表現はAtomPub  JSONにはHTTP要求ヘッダーにより対応 19
  • 20. OData クライアント  DataServiceContext を利用  サービス参照の追加により自動生成  LINQ ベースでデータを操作  MetaData による検証属性の付加が可能 20
  • 21. まとめ 21
  • 22. MVC の 「 M 」  用意されているデータアクセス機能をいか に活用するか  DbContext  ObjectContext  DataServiceContext . . .  LINQ によるデータ抽出  データの追加/更新方法は Context により異なる 22
  • 24.  Entity Framework  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  WCF Data Services  http://msdn.microsoft.com/ja-jp/library/cc668792 24
  • 25. © 2011 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.