繁体   English   中英

连接到 .NET 3.1 中的 Entity Framework Core

[英]Connect to Entity Framework Core in .NET 3.1 Azure Function Project Startup.cs

我正在尝试对 Azure 中的数据库使用实体框架。 我在 local.settings.json 中存储了一个连接字符串,但是我从 Startup.cs 引用它的所有尝试都失败了。

我能够使用 IConfiguration DI 访问我的连接字符串到 function class 并且我可以使用 SQL 命令成功访问数据库,使用如下配置:

string connectionString = _configuration.GetConnectionString("cpni");

所以我知道连接字符串正在工作并且我可以访问它。

如果我尝试在Startup class 上将DI 与 IConfiguration 一起使用,编译器不会给我任何错误,但是一旦它在调试中运行,我就会开始收到以下错误:

System.Private.CoreLib:没有为“CPNI_Functions.Startup”类型定义无参数构造函数。

这是我目前成功使用硬编码connectionString 的内容(因为将 DI 与 IConfiguration 一起使用不起作用):

builder.Services.AddDbContext<CpniContext>(
    options => options.UseSqlServer(connectionString));

这使我可以通过 EF 使用数据库。 我想使用的是它的某种组合和类似的东西:

builder.Services.AddDbContext<CpniContext>(/*options need to go here?*/)
    .Configure<IConfiguration>((configuration) =>
    {
        //Or are options supposed to go here somewhere, or be bound here with some sort of .Bind()?
        configuration.GetConnectionString("cpni");
    });

如果这没有意义或不起作用,那么请让我知道设置此 DI 的推荐方法是什么。 如果可能,我想避免通过 ConfigurationManager 使用配置查找。

作为参考,这里是完整的 Startup.cs,这是有效的:

using CPNI_Functions.Data;
using Microsoft.Azure.Functions.Extensions.DependencyInjection;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;

[assembly: FunctionsStartup(typeof(CPNI_Functions.Startup))]

namespace CPNI_Functions
{
    class Startup : FunctionsStartup
    {
        public override void Configure(IFunctionsHostBuilder builder)
        {
            string connectionString = "myconnectionstringhere";

            builder.Services.AddDbContext<CpniContext>(
                options => options.UseSqlServer(connectionString));
        }
        /*
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext<CpniContext>(configuration.GetConnectionString("cpni"));
        }*/
    }
}

我是核心新手,我是 Azure 函数的新手,所以请原谅我对此的无知。 预先感谢您的帮助。

对于 Azure function 应用程序,您可以尝试添加 NuGet ZEFE90A8E604A7F7640E8Z8D03A

System.Configuration.ConfigurationManager

local.settings.json:

{
  "ConnectionStrings": {
    "cpni": "[ConnectionStringDetails]"
  }
}

然后希望您应该能够使用 ConfigurationManager 进行访问。

services.AddDbContext<CpniContext>(
    options => options.UseSqlServer(ConfigurationManager.ConnectionStrings["cpni"].ConnectionString));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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