如何将连接字符串设置为 appsettings.json?

How do I set up a connection string into appsettings.json?

如何在我创建 appsettings.json.

的 ASP.NET 核心 blazor WebAssembly 服务器组件中设置连接字符串
{
  "ConnectionStrings": {
    "SQLiteTestConnection": "Data Source=./TestDB.db",
  }
}

现在看起来像这样,但我无法通过 Update-Database 创建数据库。

Startup.cs:

...
 public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();
            services.AddResponseCompression(opts =>
            {
                opts.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat(
                    new[] { "application/octet-stream" });
            });

            // Adding the DbContext references
            services.AddDbContext<SQLiteTestDbContext>(options =>
                options.UseSqlite("./TestDB.db"));
        }
...

正在使用中的我的 DbContext。 这个 DbContext 存储在我的 Blazor Server 组件中

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

namespace BlazorWeb.Server.Data
{
    public class SQLiteTestDbContext : DbContext
    {
        #region Constructor

        // Default parameterless Constructor 
        public SQLiteTestDbContext(DbContextOptions options)
            : base(options)
        {

        }

        #endregion


        public DbSet<ObjectModel> Objects { get; set; }


        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
            => optionsBuilder.UseSqlite("Data Source=./TestDB.db");


        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            #region Configure Object


            modelBuilder.Entity<ObjectModel>().HasData(LoadObjects());
            base.OnModelCreating(modelBuilder);

            #endregion
        }

        #region Seeding

        private List<ObjectModel> LoadObjects()
        {
            return new List<ObjectModel>
            {
                new ObjectModel() { Id = 1, Name = "Schraube", TagName = "Werkzeug" ,PreviewImage = "null"},
                new ObjectModel() { Id = 2, Name = "Gabelstapler", TagName = "Fahrzeug" ,PreviewImage = "null"},
                new ObjectModel() { Id = 3, Name = "Zange", TagName = "Werkzeug" , PreviewImage = "null"},
                new ObjectModel() { Id = 4, Name = "Sechskantschraube", TagName = "Werkzeug", PreviewImage = "null"},
            };
        }

        #endregion
    }
}

我还在 DbContext Class 的数据库中创建了一些假数据。

在您的 Startup.cs class 中将 IConfiguration 的实例声明为字段并在构造函数中对其进行初始化。

public class Startup
{
    private IConfiguration Configuration { get; }

    public Startup()
    {
        var configurationBuilder = new ConfigurationBuilder()
            .AddJsonFile("appsettings.json", true, false);

        Configuration = configurationBuilder.Build();
    }

    // Class continues
}

然后在您的 ConfigureServices() 方法中,您可以使用以下内容将您的 IConfiguration 实例声明为单例服务,这允许您注入它并在其他 classes 中使用它.

services.AddSingleton(Configuration);

您实际上不需要在 DbContext class 中指定您的数据库连接字符串,因为您已经在您的服务集合中指定了它。

所以在你的 Startup.cs 中,你现在会做

services.AddDbContext<SQLiteTestDbContext>
    (options => options.UseSqlite(Configuration["ConnectionStrings:SQLiteTestConnection"]));

您可能需要参考以下包

  • Microsoft.Extensions.Configuration
  • Microsoft.Extensions.Configuration.FileExtensions
  • Microsoft.Extensions.Configuration.Json