2011年04月10日

ASP.NET MVC 3とEntity Frameworkを使ったコードファースト開発に挑戦 (その2)

モデルクラスの作成

ソリューション エクスプローラから Modelsフォルダを右クリックし、「追加」>「クラス」をクリックします。 メモ用のモデルクラスを作成するので、ファイル名にEntryと入力して「OK」をクリックします。

namespace MvcEFApp.Models
{
    public class Entry
    {
        public int EntryId { get; set; }

        [Required]
        [StringLength(64)]
        [DisplayName("タイトル")]
        public string Title { get; set; }

        [Required]
        [DisplayName("本文")]
        [StringLength(2048)]
        public string Body { get; set; }

        public DateTime CreatedAt { get; set; }

        public virtual ICollection<Comment> Comments { get; set; }

    }
}
同様の手順でコメント用のCommentクラスを作成します。
namespace MvcEFApp.Models
{
    public class Comment
    {
        public int CommentId { get; set; }

        [Required]
        [StringLength(64)]
        [DisplayName("ニックネーム")]
        public string NickName { get; set; }

        [Required]
        [StringLength(1024)]
        [DisplayName("コメント")]
        public string Body { get; set; }

        public DateTime CreatedAt { get; set; }
    }
}

次にこれらのクラスを使うためにデータコンテキストを作ります。DbContextを継承してMvcEFAppContextクラスを作ります。 データコンテキストクラスには DbSet<T> 型のプロパティを利用します。

namespace MvcEFApp.Models
{
    public class MvcEFAppContext : DbContext
    {
        public DbSet Entrys<Entry> { get; set; }
        public DbSet Comments<Comment> { get; set; }
    }
}
Web.configのconnectionStringsにデータベースファイルの接続文字列を以下のように指定します。
<connectionStrings>
    <add name="MvcEFAppContext"
         connectionString="Data Source=|DataDirectory|MvcEFApp.sdf"
         providerName="System.Data.SqlServerCe.4.0"/>
</connectionStrings>
DBの自動生成を行うためにGlobal.asax.csのApplication_StartメソッドにDbDatabase.SetInitializer<T>メソッドを設定します。
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();

            RegisterGlobalFilters(GlobalFilters.Filters);
            RegisterRoutes(RouteTable.Routes);

            //モデルクラスに変更があった時にテーブルを自動で再作成する
            Database.SetInitializer<MvcEFAppContext>(new DropCreateDatabaseIfModelChanges<MvcEFAppContext>());
        }
ここまででDBを自動生成する準備が整いました。

リポジトリ パターンの適用

リポジトリ パターンを使用して、データ アクセス コードをアプリケーションのそれ以外の部分と分離します。 リポジトリパターンの説明は以下のページがわかりやすいので目を通すと良いでしょう。

  • ASP.NET MVCの開発応用編1 〜リポジトリパターンをマスターする〜
  • [C#] #36. フェーズ #4 - アプリケーションの疎結合化
    •  
      • 1.インターフェイスを作成する
      • 2.インターフェイスを実装する具体的なクラスを作成する
    • リポジトリ パターンを実装するには、次の 2 つの手順を完了する必要があります。

        IEntryRepositoryインターフェースを作成します。image_thumb[17]
      namespace MvcEFApp.Models
      {
          public interface IEntryRepository
          {
              Entry Find(int id);
              IList<Entry> GetAll();
              void Add(Entry entry);
              void Remove(Entry entry);
              void Save();
          }
      }
      
      次にインターフェイスを実装したEntryRepositoryクラスを作成します。
      namespace MvcEFApp.Models
      {
          public class EntryRepository : IEntryRepository
          {
              private readonly MvcEFAppContext _context = new MvcEFAppContext();
      
              public Entry Find(int id)
              {
                  return _context.Entrys.Find(id);
              }
      
              public IList GetAll()
              {
                  return _context.Entrys.ToList();
      
              }
      
              public void Add(Entry entry)
              {
                  _context.Entrys.Add(entry);
              }
      
              public void Remove(Entry entry)
              {
                  _context.Entrys.Remove(entry);
              }
      
              public void Save()
              {
                  _context.SaveChanges();
              }
          }
      }
タグ:ASP.NET MVC
posted by まーつん at 23:03| Comment(1) | TrackBack(0) | ASP.NET MVC | このブログの読者になる | 更新情報をチェックする

ASP.NET MVC 3とEntity Frameworkを使ったコードファースト開発に挑戦 (その1)

コードファースト開発

Railsではモデルクラスを記述するとそれを元にDBのテーブルが作成できてコードファーストな開発が行えるのですが、ASP.NET MVCの開発では基本的にDBありきとなっていました。今回、ASP.NET MVCでも、Railsの様にモデルクラスを記述するだけでDBの作成が自動で行えることが分かったのでその方法をメモしておきます。 今回は少し長いのでページを分けて記述します。      

環境設定

利用する環境は以下となります。 ASP.NET MVC 3 Entity Framework 4.1 SQL Server Compact 4.0 Visual Studio 2010 SP1(Visual Web Developer 2010 SP1でも可能だと思います)

ASP.NET MVC 3のインストール

ASP.NET MVC 3はWeb Platform Installerを使ってインストールします。 ですので、まずはここからWeb Platform Installerをインストールします。 インストールが完了すると、Web Platform Installerが自動で起動しASP.NET MVC 3のインストールが選択されている状態になるので、そのままインストールします。

ASP.NET MVC 3 RTM版の日本語パックのインストール

表示が英語だと何かと不便ですので、以下のリンク先から日本語パックをインストールします。 ダウンロードの詳細 : ASP.NET MVC 3 RTM AspNetMVC3Setup_JPN.exeをインストールします。

SQL Server Compact 4.0のインストール

Web Platform Installerからインストールします。

Visual Studio 2010 SP1のインストール

Web Platform Installerからインストールします。 SP1は必須ではないのですが、SP1をインストールするとSQL Server Compact 4.0にサーバーエクスプローラーからアクセスできるようになります。

Entity Frameworkのインストール

Entity Frameworkはソリューションを作成した後にインストールできます。

プロジェクトの作成

Visual Studioを起動し、メニューバーの「ファイル」>「新しいプロジェクト」をクリックします。 image ASP.NET MVC 3 Web アプリケーションを選択します。名前はMvcEFAppとしました。 image インターネットアプリケーションを選択します。

Entity Frameworのインストール

Visual Studioを起動し、ツール>Library Package Manager > Package Manager Consoleの順にクリックします。 image

Package Manager Consoleで、”PM> Install-Package EntityFramework”のように入力してください。image インストールが成功すると以下のようなメッセージが表示されます。 'EntityFramework 4.1.10311.0' が正常にインストールされました 'EntityFramework 4.1.10311.0' が MvcEFApp に正常に追加されました

以上でアプリケーションを開発できる準備が整いました。

今回作成するアプリケーション

今回は説明のために、簡単なメモが記入できて、それぞれのメモにコメントを残せるようなアプリケーションを作成します。 image
タグ:ASP.NET MVC
posted by まーつん at 21:52| Comment(0) | TrackBack(0) | ASP.NET MVC | このブログの読者になる | 更新情報をチェックする

2011年02月23日

Ninjectのエラー

Pro ASP.NET MVC 2という書籍のSPORTS STOREというチュートリアル作成中にエラーに遭遇したのでメモです。

エラー:
Error activating CartController
More than one matching bindings are available.
Activation path:
 1) Request for CartController

Suggestions:
 1) Ensure that you have defined a binding for CartController only once.


解決策:
Ninjectを最新のバージョンにする。
エラーが出たときはninject.dllの2.0.0を使っていたのですが、2.2.0に上げたところ正常に動作しました。
Ninjectの取得先:https://github.com/ninject/ninject/downloads

タグ:ASP.NET MVC
posted by まーつん at 08:44| Comment(0) | TrackBack(0) | ASP.NET MVC | このブログの読者になる | 更新情報をチェックする
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。