带有 EntityFrameworkCore 的 ASP.NET Core 中的 SQLite

Posted

技术标签:

【中文标题】带有 EntityFrameworkCore 的 ASP.NET Core 中的 SQLite【英文标题】:SQLite in ASP.NET Core with EntityFrameworkCore 【发布时间】:2016-07-29 01:25:59 【问题描述】:

如何使用 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

【问题讨论】:

fullstack-lab.co.in/Sqlite-entity-framework-core-quick-start这篇文章提供了简单的使用SQLite和asp.net core的步骤 【参考方案1】:

更新:2016 年 11 月 4 日。 重新格式化 - 图片到代码示例。信息: 请记住,在某些代码示例中,由 Visual Studio 模板生成的代码已被省略。

更新:2016 年 7 月 11 日。 .NET Core 和 EntityFrameWork Core 1.0 版即将发布! 所以本指南值得更新

第 1 步: 创建您的应用程序。

第 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 步: 将您的上下文添加到您的服务中: (位于您的 Startup 类中)

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 应用程序

第 2 步: 转到工具 -> Nuget 包管理器 -> 管理 Nuget 包以获取解决方案。 搜索 EntityFramework.SQLite 并选中 Include prelease 框。 安装包

第 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 并确保您的数据库是在您的网络应用程序开始时创建的:

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 页面,并在页面上显示:

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

Entity Framework 7 Docs

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

【讨论】:

这是直到适用于 2020 年,在核心 3.1 中 @rizu 是的。【参考方案2】:

如果您想使用 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 中打开项目。

这样做的好处是 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")));

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

【讨论】:

找不到指定的框架“Microsoft.NETCore.App”,版本“1.1.0”。所以现在它需要 1.1.0 —— yo aspnet 生成器破坏了与 v 1.0.1 的向后兼容性.. 如果您打算将 Visual Studio 与 Yeoman 一起使用,您有 2 个选择:1) download .NET Core 1.1 SDK & update NuGet to Beta。 2)手动编辑package.json并将“1.1.0-preview4-final”更改为“1.0.0-preview2-003131”(并将“1.1.0”更改为“1.0.1”。如果创建@987654350 @ 文件,请确保 sdk.version 仍然是“1.0.0-preview2-003131”,无论您选择什么。MS 正在摆脱 package.json 以支持 .csproj,因此有必要识别 package.json 我的应用程序正在使用开发设置,我无法创建使用 Sqlite 的迁移。这是我的问题,如果你能帮助***.com/questions/49598638/…【参考方案3】:

    安装下面提到的包

     PM> Install-Package Microsoft.EntityFrameworkCore
     PM> Install-Package Microsoft.EntityFrameworkCore.Sqlite
     PM> Install-Package Microsoft.EntityFrameworkCore.Tools
    

    创建模型

    创建DBContext类添加SQLite连接配置

     protected override void OnConfiguring(DbContextOptionsBuilder options)
         => options.UseSqlite("Data Source=DBFileName.db");
    

    运行迁移命令开始使用它

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

https://fullstack-lab.co.in/Sqlite-entity-framework-core-quick-start

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

【讨论】:

当然。我会从下一次确定。谢谢【参考方案4】:

在 dotnet 6 中: 您的 DbContext 构造函数应如下所示:(从您的 DbContext 中删除 OnConfiguring 方法。

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



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

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

dbPath 是您的数据库地址。

如果您想更新数据库和位于不同解决方案中的 dbContext 文件,请不要忘记在 dotnet ef 数据库更新命令中使用 --startup-project :) 例如:

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

【讨论】:

以上是关于带有 EntityFrameworkCore 的 ASP.NET Core 中的 SQLite的主要内容,如果未能解决你的问题,请参考以下文章

带有 Entity Framework Core 的 SQLite 很慢

EntityFrameworkCore DBFirst

dotnet-ef 与 net50 不兼容

您的启动项目未引用 Microsoft.EntityFrameworkCore.Design

如何使用 EntityFrameworkCore 定义父/子关系?

Aspnetcore2.0中Entityframeworkcore及Autofac的使用(附Demo)(