2017年2月7日火曜日

ConsoleApplicationでCodeFirst

VS2015 Communityでメモ

ASP.NET MVC5をいじってCodeFirstがなかなかいい感じなので
ConsoleApplicationで実行するメモ


まずはEntityFrameworkを追加します。
ツール→NuGetパッケージマネージャー→ソリューションのNuGetパッケージの管理

参照にして、EntityFrameworkで検索。
追加するプロジェクトを選択(ここではCodeFirstって名前にしてるのでそれにチェック)

そしてインストール

これで参照にEntityFrameworkが追加される。


まずは1対多のテーブルを作る。
Blogの記事に対し、コメントをつけるデータを格納する部分を作ります。
ひとまずmodelフォルダ作って格納しておきます。

model/Article.cs
namespace CodeFirst.model
{
    class Comment
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Body { get; set; }

        //リレーション(相手側が1なのでCollectionじゃない)
        public virtual Article Article { get; set; }
    }
}

model/Comment.cs
namespace CodeFirst.model
{
    class Comment
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Body { get; set; }

        //リレーション(相手側が1なのでCollectionじゃない)
        public virtual Article Article { get; set; }
    }
}

今回は、単純にConsoleApplicationで使うのをメモするだけなので、
NotNullとかの細かい部分は飛ばしていきます。

この2クラスは単なるプレーンなクラスなのでこれらとDBとをつなぐためのクラスを作ります。

model/BlogContext.cs
using System.Data.Entity;

namespace CodeFirst.model
{
    class BlogContext : DbContext
    {
        public DbSet
Articles { get; set; } public DbSet Comments { get; set; } } }

■DBの準備と接続文字列
SQL ServerにDBを作ります。
SampleCodeDBって名前で作りました。

App.configに接続文字列を追加します。

    
  

nameには、先ほど作ったBlogContextを記載します。
接続文字は先ほど作ったDBの情報を記載してください。


■マイグレーションを実行する
ツール→NuGetパッケージマネージャー→パッケージマネージャーコンソール を実行。
PM> Enable-Migrations

これでMigrationsフォルダが作られ、Configuration.csファイルが作られます。

Seedメソッドにデータを書けば初期データを挿入することができますが、今回はProgram.csで普通に追加します。
そのまえにMigrationを行ってテーブルを作成します。

マイグレーションでまず覚えておくのはたった2つ。
Add-MigrationとUpdate-Database


まずは、Migrationのファイルを作ります。前回のマイグレーションから今回のマイグレーションまでの差分を作ります。
PM> Add-Migration Init
(Add-Migration Migration名)

問題なければMigrationsフォルダにMigrationファイルがつくられます。
yyyyMMdd********_マイグレーション名.cs で作られます

データベースに反映します。
PM> Update-Database

エラーがなければDBにテーブルが作られます。


リレーションも張られてます。


■データを挿入
ひとまず、何か簡単にデータを入れてみます。

Program.cs
using CodeFirst.model;
using System.Collections.Generic;

namespace CodeFirst
{
    class Program
    {
        static void Main(string[] args)
        {
            Article article = new Article();
            article.Body = "Body_A";
            article.Title = "Title_A";

            List comments = new List() {
                    new Comment {Name = "Name_A1", Body = "Body_A1" },
                    new Comment {Name = "Name_A2", Body = "Body_A2" }
            };

            article.Comment = comments;

            BlogContext db = new BlogContext();
            db.Articles.Add(article);
            db.SaveChanges();
        }
    }
}

0 件のコメント:

コメントを投稿