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 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
in a state of ease: ASP.NET MVC 3とEntity Frameworkを使ったコードファースト開発に挑戦 (その2)
Posted by gucci 激安 at 2013年07月21日 22:58
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

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