带有 EntityFrameworkCore 的 ASP.NET Core 中的 SQLite

     2023-03-22     82

关键词:

【中文标题】带有 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 

【讨论】:

带有 Entity Framework Core 的 SQLite 很慢

】带有EntityFrameworkCore的SQLite很慢【英文标题】:SQLitewithEntityFrameworkCoreisslow【发布时间】:2021-12-0206:03:23【问题描述】:在.NETCore中通过C#中的EntityFrameworkCore向SQLiteDB插入记录非常慢。它比我的预期慢10倍。有没有提高性能的魔法... 查看详情

如何在带有 Entity Framework Core 1.0 (EF7) 的脚手架 DbContext 中使用数据库视图

】如何在带有EntityFrameworkCore1.0(EF7)的脚手架DbContext中使用数据库视图【英文标题】:HowcanIusedatabaseViewsinascaffoldedDbContextwithEntityFrameworkCore1.0(EF7)【发布时间】:2016-05-2701:35:35【问题描述】:不幸的是,EntityFrameworkCore1.0(以前的Enti... 查看详情

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

】您的启动项目未引用Microsoft.EntityFrameworkCore.Design【英文标题】:Yourstartupprojectdoesn\'treferenceMicrosoft.EntityFrameworkCore.Design【发布时间】:2019-03-0308:16:47【问题描述】:我的解决方案中有2个项目,我有一个安装了EntityFrameworkCore的... 查看详情

如何禁用 Microsoft.EntityFrameworkCore 中的约定?

】如何禁用Microsoft.EntityFrameworkCore中的约定?【英文标题】:HowtodisableconventionsinMicrosoft.EntityFrameworkCore?【发布时间】:2017-09-1712:49:52【问题描述】:我正在将SQLite与EFCore一起使用,但我遇到了一个问题……如何禁用Pluralize之类的... 查看详情

无法解析 Microsoft.EntityFrameworkCore.Diagnostics.IDiagnosticsLogger 类型的服务

】无法解析Microsoft.EntityFrameworkCore.Diagnostics.IDiagnosticsLogger类型的服务【英文标题】:UnabletoresolveservicefortypeMicrosoft.EntityFrameworkCore.Diagnostics.IDiagnosticsLogger【发布时间】:2022-01-1010:43:54【问题描述】:我在使用EF核心构建现有MySQL数... 查看详情

为啥 UseSqlCe() 支持从最新版本的 EntityFrameworkCore.SqlServerCompact40 中删除?

】为啥UseSqlCe()支持从最新版本的EntityFrameworkCore.SqlServerCompact40中删除?【英文标题】:WhyUseSqlCe()supportremovefromtheEntityFrameworkCore.SqlServerCompact40onlatestversion?为什么UseSqlCe()支持从最新版本的EntityFrameworkCore.SqlServerCompact40中删除? 查看详情

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

】如何使用EntityFrameworkCore定义父/子关系?【英文标题】:Howtodefineparent/childrenrelationwithEntityFrameworkCore?【发布时间】:2021-12-1202:42:12【问题描述】:我有一个项目使用EntityFrameworkCore来访问数据库中的数据。我正在尝试为单个对... 查看详情

实体框架:更新具有 IEnumerable 属性的实体时出错。 'Microsoft.EntityFrameworkCore.DbUpdateConcurrencyException'

】实体框架:更新具有IEnumerable属性的实体时出错。\\\'Microsoft.EntityFrameworkCore.DbUpdateConcurrencyException\\\'【英文标题】:EntityFramework:ErrorupdatinganEntitywithIEnumerableproperty.\'Microsoft.EntityFrameworkCore.DbUpdateConcurrencyExcep 查看详情

如何使用 SQL Server - 带有 EntityFramework Core 的时态表

】如何使用SQLServer-带有EntityFrameworkCore的时态表【英文标题】:HowtouseSQLServer-TemporaltableswithEntityFrameworkCore【发布时间】:2021-11-1216:13:13【问题描述】:所以,首先我在SQLServer中创建了一个临时(系统版本)表。为简单起见:CREATE... 查看详情

关于对entityframeworkcore3.1的理解与总结(代码片段)

EntityFrameworkCore是一个ORM,所谓ORM也是ef的一个框架之一吧,简单的说就是把C#一个类,映射到数据库的一个表,把类里面的属性映射到表中的字段。然后EntityFrameworkCore3.1是一个长期支持的版本。本人非常乐意对.NET社区繁荣奉献... 查看详情

EntityFrameworkCore.Sqlite - 如何使用包含给定列表的所有项目的子列表查询实体?

】EntityFrameworkCore.Sqlite-如何使用包含给定列表的所有项目的子列表查询实体?【英文标题】:EntityFrameworkCore.Sqlite-Howtoqueryentitieswithchildlistcontainingallitemsofgivenlist?【发布时间】:2022-01-0215:44:45【问题描述】:给定以下模型publicclass... 查看详情

aspnetcore2.0中entityframeworkcore及autofac的使用(附demo)((代码片段)

一,通过Entityframeworkcore中DbFirst模式创建模型这里只说一下Entityframeworkcore中DbFirst模式创建模型,想了解CodeFirst的可以自行度娘,还是在原有项目中创建一个Model类库,然后通过通过vs中NuGet的程序包管理控制台执行 安装EntityFr... 查看详情

带有 UWP 的 EF Core - Visual Studio 19

...,或者是旧版本和其他版本。我正在使用带有SQLite和UWP的EntityFrameworkCore。我该怎么做?我有一个针对.net标准2.0的c#控制台应用程序。这是包含我 查看详情

传递到 ViewDataDictionary 的模型项的类型为“Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable”

】传递到ViewDataDictionary的模型项的类型为“Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable”【英文标题】:ThemodelitempassedintotheViewDataDictionaryisoftype\'Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable【发布时间】:2 查看详情

prism+materialdesign+entityframeworkcore+postgresqlwpf开发总结之中级篇(代码片段)

原文:Prism+MaterialDesign+EntityFrameworkCore+PostgresqlWPF开发总结之中级篇本着每天记录一点成长一点的原则,打算将目前完成的一个WPF项目相关的技术分享出来,供团队学习与总结。总共分三个部分:基础篇主要争对C#初学者,巩固C#常... 查看详情

使用entityframeworkcore时,通过代码自动migration

使用EntityFrameworkCore时,通过代码自动Migration一介绍  在使用EntityFrameworkCore(下面就叫EFCore吧)进行开发时,如果模型有变动,我们要在用EFCore提供的命令行工具进行手工迁移,然后再运行程序。但是为了效率,我想能不能在程... 查看详情

prism+materialdesign+entityframeworkcore+postgresqlwpf开发总结之基础篇(代码片段)

原文:Prism+MaterialDesign+EntityFrameworkCore+PostgresqlWPF开发总结之基础篇本着每天记录一点成长一点的原则,打算将目前完成的一个WPF项目相关的技术分享出来,供团队学习与总结。总共分三个部分:基础篇主要争对C#初学者,巩固C#常... 查看详情

运行所选代码生成器时出错:无法解析类型“Microsoft.EntityFrameworkCore.DbContextOption”的服务

】运行所选代码生成器时出错:无法解析类型“Microsoft.EntityFrameworkCore.DbContextOption”的服务【英文标题】:Therewasanerrorrunningtheselectedcodegenerator:Unabletoresolveservicefortype\'Microsoft.EntityFrameworkCore.DbContextOption【发布时间】:2021-10-0118: 查看详情