【问题标题】:Could not perform EF Core for .NET Core Class Lib Project and .NET Core Web Api Project. Error: Value cannot be null. (Parameter 'connectionString')无法为 .NET Core 类库项目和 .NET Core Web Api 项目执行 EF Core。错误:值不能为空。 (参数“连接字符串”)
【发布时间】:2020-06-10 01:59:40
【问题描述】:

我将我的解决方案拆分为多个项目/层。我使用的技术是 .NET Core 和 Entity Framework Core 中的 C#。

我有一个基础设施项目,它是一个 .NET Core 类库项目,我放置了 DataContext 类。如果我将连接字符串直接放在DataContext 类中,它就可以工作。当我 set as startup project 我的 Web Api 项目时,我可以执行 EF 迁移。

public class DataContext : DbContext
{
    const string connectionString = "Server=STEVENGAI\\SQLEXPRESS;Database=CinemaDbNETCore;Trusted_Connection=True;MultipleActiveResultSets=true";

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        AppConfiguration appconfig = new AppConfiguration();
        optionsBuilder.UseSqlServer(appconfig.ConnectionString);
    }

    public DbSet<Movie> Movies { get; set; }
}

但是,我需要将连接字符串放在 appsettings.json 中。所以,我安装了这些包

  • Microsoft.Extensions.Configuration
  • Microsoft.Extensions.Configuration.Abstractions
  • Microsoft.Extensions.Configuration.Json

并让这个类从 appsettings.json 读取连接字符串。

namespace CinemaApp.NETCore.Infrastructure
{
public class AppConfiguration
{
    public readonly string _connectionString = string.Empty;
    public AppConfiguration()
    {
        var configurationBuilder = new ConfigurationBuilder();
        var path = Path.Combine(Directory.GetCurrentDirectory(), "appsettings.json");
        configurationBuilder.AddJsonFile(path, false);

        var root = configurationBuilder.Build();
        _connectionString = root.GetSection("ConnectionString").GetSection("CinemaDb").Value;
        //var appSetting = root.GetSection("ApplicationSettings");
    }
    public string ConnectionString
    {
        get => _connectionString;
    }

}
}

然后,我创建另一个 .NET Core 控制台项目来测试我是否可以获得它成功执行的连接字符串。当我 Set as Startup Project 这个控制台测试项目时,我可以执行 EF 迁移。

namespace ConsoleTest
{
class Program
{
    static void Main(string[] args)
    {
        AppConfiguration appconfig = new AppConfiguration();
        Console.WriteLine(appconfig.ConnectionString);
        Console.WriteLine("Hello World!");
    }
}
}

但是,问题是当我将Set as Startup Project 切换回 Web Api 项目并执行 EF 迁移时,它给了我这个错误Value cannot be null. (Parameter 'connectionString')

我已经为控制台测试项目和 Web Api 项目中的 appsettings.json 复制了相同的连接字符串。

【问题讨论】:

  • 你能展示你的 Startup.ConfigureServices 吗?你在哪里注册 DataContext ?
  • 没有。我没有 Startup.ConfigureServices,因为我使用的是 .NET Core 类库项目,而不是 .NET Core Web 应用程序项目
  • 你在Directory.GetCurrentDirectory()上得到了什么价值?
  • @viveknuna 感谢您的指点。我已经发现了这个问题。在我的 web api 项目 appsettings.json 中,我有 "ConnectionStrings" 但它实际上检测到没有“s”的连接字符串,"ConnectionString"

标签: c# entity-framework-core


【解决方案1】:

@viveknuna 感谢您的指点。我已经发现了这个问题。在我的 web api 项目 appsettings.json 中,我有 "ConnectionStrings" 但它实际上检测到没有“s”的连接字符串,"ConnectionString"

【讨论】:

    猜你喜欢
    • 2017-04-28
    • 2017-05-06
    • 2021-11-05
    • 2019-05-13
    • 1970-01-01
    • 2018-12-08
    • 2016-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多