Entity Framework 6 と比較するために Entity Framework Core 1.0 をコンソールアプリケーションで動かしたので、ざっくりと手順を残しておきます。
コンソールアプリケーションに限らず、ASP.NET 4.6 でも同じ手順になると思います。
NuGet で見た EF Core 1.0 の依存関係には .NET Framework 4.5.1 と記載されているので、このバージョン以上であれば動作するはずです。実際に .NET 4.6.1 で試しています。
とりあえず使うためには NuGet から Entity Framework Core をインストールする必要がありますが、依存関係が多いので使用するプロバイダのパッケージをインストールします。
今回は SQL Server で試すので、このパッケージをインストールします。コマンドの方が簡単です。
Install-Package Microsoft.EntityFrameworkCore.SqlServer -Pre
インストールが完了すると、必要なパッケージが全てインストールされます。ASP.NET Core ではパッケージの表示がシンプルになりますが、Full .NET の場合はこれまで通りです。
今のところ SQL Server 以外に SQLite と開発用の InMemory プロバイダが利用可能になっています。
接続文字列などの設定は DbContext の OnConfiguring で行います。インストールしたプロバイダに応じて DbContextOptionsBuilder の拡張メソッドが提供されるので、それを使い最低限の設定を行います。
public class AppDbContext : DbContext { protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer(ConfigurationManager.ConnectionStrings["DefaultSqlConnection"].ConnectionString); } public DbSet<Product> Products { get; set; } }
これまで通り ConfigurationManager を使って App.config に保存した接続文字列を読み込みます。
後は LINQ を使ってデータを引っ張ってくるだけです。大して EF 6 との違いはありませんでした。
class Program { static void Main(string[] args) { var context = new AppDbContext(); var product = context.Products.FirstOrDefault(x => x.Id == 1000); } }
しかし Full .NET のコンソールアプリケーションでは Startup クラスが存在していないので、DI が関係するログ周りの設定には少しコードを追加する必要があります。
SQL ログを取る
クエリのログは SQL Server Profiler を使っても取れますが、Visual Studio のデバッグウィンドウなどに出力して欲しいので、ログの設定を追加します。
と言っても、公式ドキュメントに設定方法が書いてあったので、基本的にはこれでログが取れます。
Overview of logging and interception - EF Core | Microsoft Learn
しかし、このままだとデバッグウィンドウに出力できないので、NuGet でパッケージをインストールします。
Debug 以外にも Console がありますが、インストールすればあとはほぼ同じです。
パッケージをインストールすると、ILoggerFactory に拡張メソッドが追加されるので、AddDebug メソッドの呼び出しを追加しておきます。この辺りは ASP.NET Core と同じですね。
class Program { static void Main(string[] args) { var context = new AppDbContext(); var serviceProvider = context.GetInfrastructure(); var loggerFactory = serviceProvider.GetService<ILoggerFactory>(); loggerFactory.AddDebug(); var product = context.Products.FirstOrDefault(x => x.Id == 1000); } }
これをデバッグ実行すると、Visual Studio のデバッグウィンドウに SQL ログが出力されます。
DI は内部的には常に使われているので、とりあえず IServiceProvider を取得してしまえば、あとは ASP.NET Core の Startup クラスと同じように使えそうです。
モデルクラスは EF 6 のものがそのまま使えそうなので、移行は思ったより簡単そうでした。