简体   繁体   中英

Add new table to SQLite using an ASP.NET Core Web API app

I am learning how to write an ASP.NET Core Web API application with Sqlite database access.

I have a problem of adding new table to my application using Sqlite database.

I saw the Microsoft article how to create and initialize Sqlite database Getting Started with EF Core ) like below.

I have tried to add

public DbSet<myClass> Test { get; set; }

just after

public DbSet<Post> Posts { get; set; }

thinking the code will automatically add the Test table, but it does not (I am using DB Browser for SQLite tool to view the database).

I have searched dozen of articles but have found no answer. Could someone point me in the right direction please?

using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;

public class BloggingContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }
    public DbSet<Post> Post { get; set; }

    public string DbPath { get; }

    public BloggingContext()
    {
        var folder = Environment.SpecialFolder.LocalApplicationData;
        var path = Environment.GetFolderPath(folder);
        DbPath = System.IO.Path.Join(path, "blogging.db");
    }

    // The following configures EF to create a Sqlite database file in the
    // special "local" folder for your platform.
    protected override void OnConfiguring(DbContextOptionsBuilder options)
        => options.UseSqlite($"Data Source={DbPath}");
}

public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }

    public List<Post> Posts { get; } = new();
}

public class Post
{
    public int PostId { get; set; }
    public string Title { get; set; }
    public string Content { get; set; }

    public int BlogId { get; set; }
    public Blog Blog { get; set; }
}

I tried as below:At first ,I generate the dbcontext with

public class Blog
    {
        public int BlogId { get; set; }
        public string Url { get; set; }

    }

and enter add- migration in Package Manage console Then I updated the dbcontext with the Blog and Post Model you shoued and and enter add- migration again. Now,there're two classes in Migration Floder as below:

migration1:

public partial class _1 : Migration
    {
        protected override void Up(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.CreateTable(
                name: "Blog",
                columns: table => new
                {
                    BlogId = table.Column<int>(type: "int", nullable: false)
                        .Annotation("SqlServer:Identity", "1, 1"),
                    Url = table.Column<string>(type: "nvarchar(max)", nullable: true)
                },
                constraints: table =>
                {
                    table.PrimaryKey("PK_Blog", x => x.BlogId);
                });
        }

        protected override void Down(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.DropTable(
                name: "Blog");
        }
    } 

Migration 2:

public partial class _2 : Migration
{
    protected override void Up(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.CreateTable(
            name: "Post",
            columns: table => new
            {
                PostId = table.Column<int>(type: "int", nullable: false)
                    .Annotation("SqlServer:Identity", "1, 1"),
                Title = table.Column<string>(type: "nvarchar(max)", nullable: true),
                Content = table.Column<string>(type: "nvarchar(max)", nullable: true),
                BlogId = table.Column<int>(type: "int", nullable: false)
            },
            constraints: table =>
            {
                table.PrimaryKey("PK_Post", x => x.PostId);
                table.ForeignKey(
                    name: "FK_Post_Blog_BlogId",
                    column: x => x.BlogId,
                    principalTable: "Blog",
                    principalColumn: "BlogId",
                    onDelete: ReferentialAction.Cascade);
            });

        migrationBuilder.CreateIndex(
            name: "IX_Post_BlogId",
            table: "Post",
            column: "BlogId");
    }

    protected override void Down(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.DropTable(
            name: "Post");
    }
}

Then you could update your database to the version you want with entering update-database "migrationname" in Package Manage console.If you already updated your database to the latest and want to restore to the former version,

you could also try update-database "former migrationname" like below: 在此处输入图像描述

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM