sqlite ASP.NET核心Web API中的连接字符串

nxowjjhe  于 2022-11-14  发布在  SQLite
关注(0)|答案(1)|浏览(282)

我的控制台项目中有一个SQLite数据库,此连接字符串在DbContext设置中运行良好:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
  optionsBuilder.UseSqlite("Data Source=PubDatabase.db")

当我编译时,将在ConsoleApp>bin>DEBUG>net6.0>PubDatabase.db中创建数据库。在我的ASP.NET Core项目中,我使用appsettings.json设置连接字符串:

"ConnectionStrings": {
"PubConnection": "Data Source=../PubDatabase.db"

我将PubDatabase.db文件放在这个文件夹中:APIProject>bin>DEBUG>net6.0。
在我使用的Program.cs中:

builder.Services.AddDbContext<PubContext>(
opt=>opt.UseSqlite(builder.Configuration.GetConnectionString("PubConnection"))

我的DbContext:

namespace PublisherData;
public class PubContext:DbContext
{
 public DbSet<Author> Authors { get; set; }
 public DbSet<Book> Books { get; set; }
 public DbSet<Artist> Artists { get; set; }
 public DbSet<Cover> Covers { get; set; }

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

 }

但当我在AuthorsController中尝试此操作时:

[Route("api/[controller]")]
[ApiController]
public class AuthorsController : ControllerBase
{
    private readonly PubContext _context;

    public AuthorsController(PubContext context)
    {
        _context = context;
    }

    // GET: api/Authors
    [HttpGet]
    public async Task<ActionResult<IEnumerable<Author>>> GetAuthors()
    {
        return await _context.Authors.ToListAsync();
    }

我得到了这个错误:

我应该将数据库放在哪里才能通过连接字符串访问它?

ivqmmu1c

ivqmmu1c1#

我做了一个简单的测试,你可以按照我下面的步骤操作。
首先,安装NuGet包:

Microsoft.EntityFrameworkCore.Design
Microsoft.EntityFrameworkCore.Sqlite
Microsoft.EntityFrameworkCore.Tools

然后,创建上下文:

public class SqlContext : DbContext 
    {
        public SqlContext(DbContextOptions<SqlContext> Options) : base(Options)
        {
        }
        
        public DbSet<Author> Authors { get; set; } 

    }

添加连接字符串:
Appsettings.json:

"ConnectionStrings": { 
    "WebApiDatabase": "Data Source=PubDatabase.db"
  }

Program.cs:

builder.Services.AddEntityFrameworkSqlite().AddDbContext<SqlContext>(opt => opt.UseSqlite(builder.Configuration.GetConnectionString("WebApiDatabase")));

最后,迁移和更新数据库:

Add-Migration InitialCreate
Update-Database

这三个文件出现在目录结构中:

测试结果:

希望这能对你有所帮助。

相关问题