【问题标题】:'Value cannot be null. (Parameter 'connectionString')' - Azure Function - Entity Framework Core'值不能为空。 (参数'connectionString')' - Azure 函数 - 实体框架核心
【发布时间】:2021-08-26 11:37:40
【问题描述】:

我正在和这个作斗争......如果可以的话请帮忙

这是在我的启动文件中(依赖注入)

public override void Configure(IFunctionsHostBuilder builder)
    {
       

        builder.Services.AddDbContext<CatsDBContext>(
            options =>
            {
                const string Name = "SqlConnectionString";
                options.UseSqlServer(Configuration.GetConnectionString(Name));
            });

这是我的 local.settings.json

{
    "IsEncrypted": false,   "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet"   },
     "ConnectionStrings": {
    "SqlConnectionString": "Server=tcp:animal77.database.windows.net,1433;Initial Catalog=CatsDB;Persist Security Info=False;User ID=j;Password=A;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;"
       } }

这是我的上下文

namespace Shizzle.Models
{
    public partial class CatsDBContext : DbContext
    {
        public CatsDBContext()
        {
        }

        public CatsDBContext(DbContextOptions<CatsDBContext> options)
            : base(options)
        {
            
        }

        public virtual DbSet<Cats> Cats { get; set; }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            if (!optionsBuilder.IsConfigured)
            {
#warning 
          //  optionsBuilder.UseSqlServer("Server=tcp:animal77.database.windows.net,1433;Initial Catalog=CatsDB;Persist Security Info=False;User ID=j;Password='';MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;");
            }

这是我希望它对数据库执行的功能

namespace Shizzle
{
    public  class Function1
    {
        private readonly CatsDBContext _applicationDbContext;

        public Function1(CatsDBContext applicationDbContext)
        {
            _applicationDbContext = applicationDbContext;
        }

        [FunctionName("Function1")]
        public async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
            ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");
            
            string name = req.Query["name"];

            var demo = new Cats { Name = "Jason", Id = 5 };
            _applicationDbContext.Cats.Add(demo);
            _applicationDbContext.SaveChanges();

这是我的启动 DI 类:

[assembly: FunctionsStartup(typeof(Startup))]

namespace Shizzle
{
    class Startup : FunctionsStartup
     {

       public IConfiguration Configuration { get;  }

        public override void Configure(IFunctionsHostBuilder builder)
        {
           

            builder.Services.AddDbContext<CatsDBContext>(
                options =>
                {
                    const string Name = "SqlConnectionString";
                    options.UseSqlServer(Configuration.GetConnectionString(Name));
                });
            

        }

        }
   
}

我在 Visual Studio 2019 中遇到此错误

谁能帮忙 - 这让我发疯了。

【问题讨论】:

  • 你少了一个's'。
  • 一方面,连接字符串对象应该在“值”对象中。虽然不确定该对象是否在那里工作,但您也可以在 values 对象中使用顶级设置。
  • 我在哪里错过了 s ?
  • 如果我将它添加到他们的 intelisense 中,它不会调出 ConnectionStrings,而我放的地方却会。
  • 构建配置的逻辑在哪里?您的配置对象来自哪里?

标签: c# entity-framework-core azure-functions


【解决方案1】:

您缺少构建配置的逻辑

我认为最好的方法是同时覆盖ConfigureAppConfiguration

public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder) 
{
  Configuration = builder.ConfigurationBuilder.Build();
}

但您也可以将其添加到您的 Configure 函数中

【讨论】:

  • 顶级人物!谢谢你
猜你喜欢
  • 2019-11-26
  • 1970-01-01
  • 2017-06-06
  • 2016-11-16
  • 1970-01-01
  • 2021-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多