在 ASP.NET 核心中使用 EntityFrameworkCore 实现 SQLite

如何使用 EntityFramework7在 ASP.NET Core Web 应用程序中添加和使用 SQLite 数据库?

当我听说 ASP.NET Core 并创建了我的第一个 web 应用程序时,我突然想要存储一大堆数据,而 SQLite 似乎是显而易见的选择。
因为我希望它与我的应用程序保持一致,所以要保持它的轻量级、简单并避免建立单独的数据库。

那么如何在 ASP.NET Core 中创建 SQLite 数据库呢?

  • NET 核心-现在以前称为 ASP.NET MVC 6
  • EntityFrameworkCore-现在以前称为 EntityFramework7
86898 次浏览

更新: 2016年11月4日。
重新格式化-将图片转换为代码示例。
资讯 : 请记住,在一些代码示例中,忽略了由可视化工作室模板生成的代码。

更新: 2016年7月11日。
.NET 核心和 EntityFrameWork 核心1.0版即将发布!
因此,这本指南值得一点更新

第一步:
创建应用程序。
enter image description here

第二步:
去拿必要的包裹
Microsoft.EntityFrameworkCore1.0.0
Microsoft.EntityFrameworkCore.SQlite 1.0.0

第三步:
创建你的上下文:
(Context 将是您创建的类)

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

第四步:
将您的上下文添加到您的服务中:
(位于您的启动类)

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

第五步:
通过将数据库添加到启动方法,在启动时创建数据库
(位于 Startup 类中)

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

瞧!
现在您可以在 ASP.NET 核心应用程序中使用 SQLite 了。
关于如何创建模型以及如何使用数据库上下文,旧的指南仍然适用。


更新: 2016年5月28日。
.NET 核心 RC2和 EntityFramework 核心 RC1已经发布。
他们改进并简化了设置 SQLite 的步骤。
但是我遇到了一些麻烦,不能复制它,因为牛顿软件的一个错误。Json Library 和 NuGet。

如果您现在想这样做,我建议您坚持使用 RC1库!


第一步:
创建您的 ASP.NET Web 应用程序

ASP.NET5WebApp

第二步:
转到 Tools-> Nuget Packet Manager-> Manage Nuget Packages for Solution。
搜索 EntityFramework.SQLite并选中 Include prelease框。
安装软件包

NugetEF7Sqlite

步骤3: 创建上下文
为数据库创建上下文类。
随便你怎么称呼它,但是让我们用一些习惯的东西,比如 MyDbContext。 让您的新类继承 DbContext 类并重写 OnConfig 方法,然后像下面这样定义您的连接:

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);
}
}

第四步:
转到 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 页面,在页面上显示如下:
webpage

第二行是(或将是)数据库中第一个类别的标题。

实体框架7文档

这是我的第一个问与答-如果你有任何投入或需要澄清的东西,不要犹豫,评论。
这是如何将 SQLite 数据库实现到 ASP.NET Core MVC Web 应用程序中的一个非常基本的示例。
请注意,有几种方法可以设置数据库的连接字符串、如何使用上下文以及 EntityFramework 7仍然是一个预发布版本

如果您想使用 SQLite 为数据库创建一个 ASP.NET Core web 应用程序,我强烈建议您使用 文书为应用程序搭建脚手架。首先需要安装 .NET Core 1.1 SDK(目前 Visual Studio 2015似乎只包含 SDK 版本1.0.0和1.0.1)。然后需要安装 npm 附带的 Node.js,然后安装以下 npm 包: 发电机-天线网络。然后你要做的就是运行 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 updatedotnet run,然后转到 localhost:5000,以确保项目正在运行。

现在您可以在 VisualStudio2015(假设您在 Windows 上)或 VisualStudioCode 中打开项目。

ASP.NET Core web application generated using Yeoman

这样做的好处是将 Startup.csproject.jsonappsettings.json文件设置为使用 SQLite。此外,还为您创建了一个 SQLite 数据库:

Startup.cs:

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

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

如果要重命名 SQLite 数据库,请修改 appsettings.json文件并运行 dotnet ef database update

要了解有关在.NET Core 和 EF Core 中使用 SQLite 数据库的更多信息,请查看本文: .NET 核心-新数据库

  1. 安装下面提到的软件包

     PM> Install-Package Microsoft.EntityFrameworkCore
    PM> Install-Package Microsoft.EntityFrameworkCore.Sqlite
    PM> Install-Package Microsoft.EntityFrameworkCore.Tools
    
  2. 创建模型

  3. 创建 DBContext 类添加 SQLite 连接配置

     protected override void OnConfiguring(DbContextOptionsBuilder options)
    => options.UseSqlite("Data Source=DBFileName.db");
    
  4. 运行迁移命令开始使用它

     PM> add-migration <MigrationName>  //Ex: add-migration IntialMigration
    PM> update-database
    

Https://fullstack-lab.co.in/sqlite-entity-framework-core-quick-start

本文提供了在 Asp.net 核心3.1中使用 SQLite 的简单步骤

网络6: 您的 DbContext 构造函数应该如下所示: (从 DbContext 中删除 OnConconfiguration 方法。

    public PaymentDbContext(DbContextOptions<PaymentDbContext> options) : base(options)
{


}

在 Program.cs 文件中,像这样添加您的服务:

builder.Services.AddDbContext<PaymentDbContext>(options =>
options.UseSqlite($"Data Source={dbPath}"));

DbPath 是您的数据库地址。

如果您想更新数据库和位于不同解决方案中的 dbContext 文件,不要忘记使用—— start-project in dotnet ef database update 命令:) ex:

dotnet ef database update --startup-project ../PaymentProject.Api/PaymentProject.Api.csproj