ASP.NET Core中的SQLite與EntityFrameworkCore

asp.net-core-mvc asp.net-mvc c# entity-framework-core sqlite3

如何使用EntityFramework 7在ASP.NET Core Web應用程序中添加和使用SQLite數據庫?

我聽說它並創建了我的第一個Web應用程序時,我潛入了ASP.NET Core,我突然想要存儲一堆數據,而SQLite似乎是明顯的選擇。
因為我希望它與我的應用程序保持一致,所以要保持它的輕量級,簡單並避免設置單獨的數據庫。

那麼如何在ASP.NET Core中創建SQLite數據庫呢?

  • ASP.NET Core - 現在以前稱為ASP.NET MVC 6
  • EntityFramework Core - 現在以前稱為EntityFramework 7

一般承認的答案

更新:2016年11月4日。
重新格式化 - 圖片到代碼示例。
信息 :請記住,在某些代碼示例中,已省略了visual studio模板生成的代碼。

更新:2016年7月11日。
.NET Core和EntityFrameWork核心版本1.0正在我們身上!
因此本指南值得一點更新

步驟1:
創建應用程序。
在此處輸入圖像描述

第2步:
獲得必要的包裹
Microsoft.EntityFrameworkCore 1.0.0
Microsoft.EntityFrameworkCore.SQlite 1.0.0

第3步:
創建您的上下文:
(Context將是您創建的類)

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

步驟4:
將您的上下文添加到您的服務:
(位於您的Startup課程中)

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

第5步:
通過將其添加到啟動方法,在啟動時創建數據庫
(位於Startup類)

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

EtVoÃla!
現在,您將能夠在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數據包管理器 - >管理解決方案的Nuget包。
搜索EntityFramework.SQLite並選中Include prelease框。
安裝包

NugetEF7Sqlite

第3步:創建上下文
為數據庫創建上下文類。
無論你想要什麼,都可以調用它,但是讓我們選擇像MyDbContext這樣的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);
}

因此,通過轉到Index視圖,您可以使用數據庫中的虛數據。通過在視圖頂部定義模型,如下所示:

@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頁面,在頁面上顯示:
網頁

第二行是(或將是)我們數據庫中第一個類別的標題。

實體框架7文檔

這是我的第一個問答 - 如果您有任何意見或需要澄清的內容,請不要猶豫。
這是如何將SQLite數據庫實現到ASP.NET Core MVC Web應用程序的一個非常基本的示例。
請注意,有幾種方法可以為數據庫設置連接字符串,如何使用上下文以及EntityFramework 7仍然是一個預發行版


熱門答案

如果您想使用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軟件包: yogenerator-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。

使用Yeoman生成的ASP.NET Core Web應用程序

關於這一點的appsettings.jsonStartup.csproject.jsonappsettings.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 - 新數據庫



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow