FROM ME TO YOU

oh my bizarre life !!

Entity Frameworkを試す(2)

最近触れてなかったC#をリトライ。

この記事の通りにEntity Frameworkを試してみたんだけど、DBにアクセスできなくて詰まってたのが解消できたのでまとめておく。

kitigai.hatenablog.com

  1. プロジェクトを作成
  2. NugetでEntity Framework(執筆時は6.2.0)をインストール
  3. ADO.NET Entity Data Modelを追加して以下を記述
    public class BooksDb : DbContext
    {

        public BooksDb(): base("name=BooksDb"){}
        public DbSet<Book> Books { get; set; }
        public DbSet<Author> Authors { get; set; }
    }

    public class Book
    {
        public int Id { get; set; }
        public string Title { get; set; }
        public int PublishedYear { get; set; }
    }

    public class Author
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public DateTime Birthday { get; set; }
        public string Gender { get; set; }
    }

記事内には

Mainのコードは何も書いていないがとりあえず実行 初回はDBの作成等でいつものコンソールアプリケーションの 起動よりは時間がかかる気がするがすぐに完了する。

Visual Studioのメニュー[表示]からSQL Server オブジェクトエクスプローラーを選択 以下の画像のようにDBとテーブルが作成されていることを確認する。

とあったけれど、一向にDBとテーブルが作成されない。 何度かプロジェクトを作り直したけど改善されない。

ただ、Mainに何も書かなくて、どうやってDbContextを継承したBoooksDBが生成されるんだろう?と疑問に思った。 試しにMain側にプログラムを書いてみたところ正常に作成できた。

        static void Main(string[] args)
        {
            using (var EF = new BooksDb())
            {
                EF.Books.Add(new Book
                {
                    Title = "タイトル",
                    PublishedYear = 2019
                });

                EF.SaveChanges();
            }
        }

f:id:fmty_keita:20190703002113p:plain

接続先変更

App.Configのを変更して別サーバーのSQLServerにアクセスできることも確認。

<connectionStrings>
    <add name="BooksDB" connectionString="data source=127.0.0.1;initial catalog=BooksDB;User ID=sa;Password=hogehoge;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
</connectionStrings>

引き続き調べていきたい

  • DataGridViewにデータを表示する
  • Entity FrameworkのDB記述方法(キーの生成やインデックスの貼り方など)