web-dev-qa-db-ja.com

EntityFrameworkCoreを使用したASP.NET CoreのSQLite

EntityFramework 7を使用して、ASP.NET Core WebアプリケーションでSQLiteデータベースを追加および使用するにはどうすればよいですか?

ASP.NET Coreについて聞いて、最初のWebアプリケーションを作成した瞬間に、突然格納したいデータがたくさんあり、SQLiteが当然の選択のように思えました。
アプリケーションにそのまま残したかったので、軽量でシンプルな状態に保ち、別のデータベースをセットアップしないでください。

では、ASP.NET CoreでSQLiteデータベースを作成するにはどうすればよいでしょうか?

  • ASP.NET Core-以前はASP.NET MVC 6として知られていました
  • EntityFramework Core-以前はEntityFramework 7として知られるようになりました
36
Cicero

更新:2016年11月4日
再フォーマット-写真をコード例に。
Info:一部のコード例では、生成されたコードに注意してくださいVisual Studioテンプレートでは省略されています。

更新:2016年7月11日
。NET CoreおよびEntityFrameWork Coreバージョン1.0がリリースされました!
したがって、このガイドは少し更新に値します

ステップ1:
アプリケーションを作成します。
enter image description here

ステップ2:
必要なパッケージを入手する
Microsoft.EntityFrameworkCore 1.0.0
Microsoft.EntityFrameworkCore.SQlite 1.0.0

ステップ3:
コンテキストを作成します。
(コンテキストは作成するクラスになります)

_public class DatabaseContext : DbContext
{
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlite("Filename=MyDatabase.db");
    }
}
_

ステップ4:
コンテキストをサービスに追加します。
(スタートアップクラスにあります)

_public void ConfigureServices(IServiceCollection services)
{
    services.AddEntityFrameworkSqlite().AddDbContext<DatabaseContext>();
}
_

ステップ5:
起動メソッドにデータベースを追加して、起動時にデータベースを作成します
(Startupクラスにあります)

_public Startup(IHostingEnvironment env)
{
    using(var client = new DatabaseContext())
    {
        client.Database.EnsureCreated();
    }
}
_

エヴォイラ!
これで、ASP.NET CoreアプリケーションでSQLiteを使用できるようになります。
モデルの作成方法およびデータベースコンテキストの使用に関する古いガイドは引き続き適用されます。


更新:2016年5月28日
。NET Core RC2およびEntityFramework Core RC1がリリースされました。
SQLiteのセットアップ手順が改善および簡素化されました。
しかし、Newtonsoft.JsonライブラリとNuGetにエラーがあるため、問題が発生し、複製できません。

これを行いたい場合は、今のところRC1ライブラリに固執することをお勧めします!


ステップ1:
ASP.NET Webアプリケーションを作成します

ASP.NET5WebApp

ステップ2:
[ツール]-> [Nuget Packet Manager]-> [ソリューション用のNugetパッケージの管理]に移動します。
_EntityFramework.SQLite_を検索し、_Include prelease_ボックスをオンにします。
パッケージをインストールします

NugetEF7Sqlite

ステップ3:コンテキストの作成
データベースのコンテキストクラスを作成します。
好きな名前を付けて呼び出しますが、MyDbContextのような慣習的なものを使用しましょう。新しいクラスにDbContextクラスを継承させ、OnConfiguringメソッドをオーバーライドして、接続を次のように定義します。

_public class MyDbContext : DbContext
{
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        var connectionStringBuilder = new SqliteConnectionStringBuilder { DataSource = "MyDb.db" };
        var connectionString = connectionStringBuilder.ToString();
        var connection = new SqliteConnection(connectionString);

        optionsBuilder.UseSqlite(connection);
    }
}
_

ステップ4:
_Startup.cs_に移動し、Webアプリケーションの開始時にデータベースが作成されていることを確認します。

_public Startup(IHostingEnvironment env)
    {
        // Set up configuration sources.
        var builder = new ConfigurationBuilder()
            .AddJsonFile("appsettings.json")
            .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);         


        using (var db = new MyDbContext())
        {
            db.Database.EnsureCreated();
            db.Database.Migrate();
        }

    }
_

次に、サービスを追加する必要があります。

_public void ConfigureServices(IServiceCollection services)
    {
        // Add framework services.
        services.AddMvc();

        services.AddEntityFramework()
        .AddSqlite()
        .AddDbContext<MyDbContext>();
    }
_

ステップ5:モデルの定義
モデルを作成し、_MyDbContext.cs_に移動して、新しいモデルごとに新しいプロパティを追加します(それぞれのテーブルが必要な場合!)。
例を次に示します。
私のモデル:

_public class Category
{
    public int Id { get; set; }

    public string Title { get; set; }

    public string Description { get; set; }

    public string UrlSlug { get; set; }
}
_

それを私のコンテキストに追加する:

_public class MyDbContext : DbContext
{
    public DbSet<Category> Categories { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        var connectionStringBuilder = new SqliteConnectionStringBuilder { DataSource = "MyDb.db" };
        var connectionString = connectionStringBuilder.ToString();
        var connection = new SqliteConnection(connectionString);

        optionsBuilder.UseSqlite(connection);
    }
}
_

ステップ6:コンテキストの使用
HomeControllerに移動し、コントローラーに新しいフィールドを追加します。
private readonly MyDbContext _myDbContext = new MyDbContext();
そして、返されたビューにそれを渡すことで、ActionResultで使用します:(今、データベースにカテゴリがあると仮定します)

_public IActionResult Index()
{
    var category = _myDbContext.Categories.First();
    return View(category);
}
_

したがって、インデックスビューに移動すると、データベースからの仮想データを使用できます。次のようにビューの上部でモデルを定義することにより:

_@model  MyNameSpace.Models.Category
@{
   ViewData["Title"] = "Hey Ho! SO!";
}


<div class="page-header">
    <h1>@ViewData["Title"]</h1>
</div>

<div class="container">
    @Model.Title
</div>
_

これで、Webアプリケーションを起動し、割り当てられたアドレスに移動すると、デフォルトのhtmlページが表示され、空想bootstrap=ヘッダーが表示され、これがページに表示されます。
webpage

2行目は、データベースの最初のカテゴリのタイトルです(またはそうなります)。

Entity Framework 7のドキュメント

これは私の最初のQ&Aです-入力や明確にする必要があるものがあれば、遠慮なくコメントしてください。
これは、SQLiteデータベースをASP.NET Core MVC Webアプリケーションに実装する方法の非常に基本的な例です。
データベースの接続文字列を設定する方法、コンテキストの使用方法、およびEntityFramework 7はまだプレリリースであることに注意してください

90
Cicero

データベースにSQLiteを使用してASP.NET Core Webアプリケーションを作成する場合は、 Yeoman を使用してアプリの足場を作成することを強くお勧めします。最初に 。NET Core 1.1 SDK をインストールする必要があります(Visual Studio 2015には、現時点ではSDKバージョン1.0.0および1.0.1のみが含まれているようです)。次に、npmに付属の Node.js をインストールしてから、次のnpmパッケージをインストールする必要があります: yo および generator-aspnet 。あとは、yo aspnetを実行して、いくつかの質問に答えるだけです。

C:\Development>yo aspnet
? ==========================================================================
We're constantly looking for ways to make yo better!
May we anonymously report usage statistics to improve the tool over time?
More info: https://github.com/yeoman/insight & http://yeoman.io
========================================================================== Yes

     _-----_     ╭──────────────────────────╮
    |       |    │      Welcome to the      │
    |--(o)--|    │  marvellous ASP.NET Core │
   `---------´   │        generator!        │
    ( _´U`_ )    ╰──────────────────────────╯
    /___A___\   /
     |  ~  |
   __'.___.'__
 ´   `  |° ´ Y `

? What type of application do you want to create? Web Application
? Which UI framework would you like to use? Bootstrap (3.3.6)
? What's the name of your ASP.NET application? WebApplication

その後、次の応答が返されます。

 Your project is now created, you can use the following commands to get going
    cd "WebApplication"
    dotnet restore
    dotnet build (optional, build will also happen when it's run)
    dotnet ef database update (to create the SQLite database for the project)
    dotnet run

dotnet restoredotnet ef database update、次にdotnet runを実行し、localhost:5000に移動して、プロジェクトが実行されていることを確認します。

これで、Visual Studio 2015(Windowsを使用している場合)またはVisual Studio Codeでプロジェクトを開くことができます。

ASP.NET Core web application generated using Yeoman

これの素晴らしい点は、Startup.csproject.json、およびappsettings.jsonファイルがSQLiteを使用するように設定されていることです。また、SQLiteデータベースが作成されます:

Startup.cs:

public void ConfigureServices(IServiceCollection services)
{
    // Add framework services.
    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlite(Configuration.GetConnectionString("DefaultConnection")));
}

project.json:

{
    "Microsoft.EntityFrameworkCore.Sqlite": "1.1.0",
    "Microsoft.EntityFrameworkCore.Sqlite.Design": {
      "version": "1.1.0",
      "type": "build"
    }
}

appsettings.json

{
  "ConnectionStrings": {
    "DefaultConnection": "Data Source=WebApplication.db"
  }
}

SQLiteデータベースはbin/Debug/netcoreapp1.0にあります。私の場合、C:\Development\WebApplication\bin\Debug\netcoreapp1.0\WebApplication.dbにあります

SQLiteデータベースの名前を変更する場合は、appsettings.jsonファイルを変更し、dotnet ef database updateを実行します。

.NET CoreおよびEF CoreでSQLiteデータベースを使用する方法の詳細については、この記事をご覧ください。 。NET Core-New Database

7
kimbaudi