1.21 jigowatts

Great Scott!

Entity Framework~実行ログを日本語化する

概要

Entity Frameworkの実行ログはデフォルトで英語のログが出力されるので日本語化します。
f:id:sh_yoshida:20150609011123p:plain

環境

Microsoft Visual Studio Community 2013
Entity Framework 6.1.3

実装

前回、パッケージマネージャーコンソールからEntity Frameworkをインストールしたので、これを元にCode Firstで実装します。

Modelの用意

System.ComponentModel.DataAnnotationsを参照追加します。

using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace ConsoleApplication1.DAL
{
    [Table("People")]
    public class Person
    {
        [Required]
        [Key]
        public int ID { get; set; }

        [Required]
        [MaxLength(50)]
        public string Name { get; set; }

        [MaxLength(50)]
        public string PhoneNumber { get; set; }

        [MaxLength(50)]
        public string Address { get; set; }

        [MaxLength(25)]
        public string Job { get; set; }

        public string UpdatedBy { get; set; }

        public DateTime? UpdateDate { get; set; }
    }
}
Contextの用意
using System.Data.Entity;

namespace ConsoleApplication1.DAL
{
    public class EFContext : DbContext
    {
        public EFContext()
            : base("name=EFC")
        {
        }

        // virtualにすることでLazy Loading
        public virtual DbSet<Person> People { get; set; }
    }
}
App.configの用意

LocalDbへの接続情報を追記します。

<?xml version="1.0" encoding="utf-8"?>
<configuration>

  ...(中略)

  <connectionStrings>
    <add name="EFC" connectionString="data source=(LocalDb)\v11.0;initial catalog=EFC;
         integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"
         providerName="System.Data.SqlClient" />
  </connectionStrings>
</configuration>
エントリポイント
using ConsoleApplication1.DAL;
using System;
using System.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var context = new EFContext())
            {
                // ログ出力
                context.Database.Log = x => Console.WriteLine(x);

                var query = from x in context.People
                            select x;

                foreach (var item in query)
                {
                    Console.WriteLine(item.ID + "\t" + item.Name);
                }
            }

            Console.ReadKey();
        }
    }
}

日本語リソースのインストール

パッケージマネージャーコンソールからEntityFramework.jaを取得します。

PM> Install-Package EntityFramework.ja

packages.configファイルで追加されたことを確認。

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="EntityFramework" version="6.1.3" targetFramework="net45" />
  <package id="EntityFramework.ja" version="6.1.3" targetFramework="net45" />
</packages>

実行

日本語化されました\(´∀`)/
f:id:sh_yoshida:20150609011338p:plain