gpt4 book ai didi

c# - 如何使用 .NET Core 配置框架将连接字符串放置到 json 配置文件中?

转载 作者:行者123 更新时间:2023-11-30 23:08:33 24 4
gpt4 key购买 nike

我的解决方案有 3 个项目:

  • 实体(包括 Dbcontext,...),目标框架 .NetStandard 1.4,项目类型库
  • WebAPI
  • 网络用户界面

我想创建函数迁移到实体项目中。在实体项目中,我有一个类 TemporaryDbContextFactory

public class TemporaryDbContextFactory : IDbContextFactory<MyContext>
{


public ApplicationContext Create(DbContextFactoryOptions options)
{
var builder = new DbContextOptionsBuilder<MyContext>();
builder.UseSqlServer("Server=(local)\\mssqllocaldb;Database=mydatabase;Trusted_Connection=True;MultipleActiveResultSets=true;User ID=sa; Password=123456",
optionsBuilder => optionsBuilder.MigrationsAssembly(typeof(MyContext).GetTypeInfo().Assembly.GetName().Name));
return new MyContext(builder.Options);
}
}

但在这里我不想使用硬编码连接字符串,我尝试为动态连接字符串创建应用程序设置:

public class MyContextFactory : IDbContextFactory<ApplicationContext>
{
public MyContext Create()
{
var environmentName =
Environment.GetEnvironmentVariable(
"Hosting:Environment");

var basePath = AppContext.BaseDirectory;

return Create(basePath, environmentName);
}

public MyContext Create(DbContextFactoryOptions options)
{
return Create(
options.ContentRootPath,
options.EnvironmentName);
}

private MyContext Create(string basePath, string environmentName)
{
var configuration = new Configuration();
configuration.AddJsonFile(“config.json”);
var emailAddress = configuration.Get("emailAddress");

var builder = new ConfigurationBuilder()
.SetBasePath(basePath)
.AddJsonFile("appsettings.json")
.AddJsonFile($"appsettings.{environmentName}.json", true)
.AddEnvironmentVariables();


var config = builder.Build();

var connstr = config.GetConnectionString("(default)");

if (String.IsNullOrWhiteSpace(connstr) == true)
{
throw new InvalidOperationException(
"Could not find a connection string named '(default)'.");
}
else
{
return Create(connstr);
}
}

private MyContext Create(string connectionString)
{
if (string.IsNullOrEmpty(connectionString))
throw new ArgumentException(
$"{nameof(connectionString)} is null or empty.",
nameof(connectionString));

var optionsBuilder =
new DbContextOptionsBuilder<MyContext>();

optionsBuilder.UseSqlServer(connectionString);

return new MyContext(optionsBuilder.Options);
}
}

我坚持创建一个实例

var configuration = new Configuration();

实体项目没有任何对 Microsoft.Extensions.Configuration 的引用我不知道如何添加它,因为我找不到它。请帮我添加这个引用或建议我不同的方式

最佳答案

这是一个新的配置框架,习惯之后你会喜欢的:

var configuration = new ConfigurationBuilder()
.AddJsonFile("config.json")
.Build();
var emailAddress = configuration.GetValue<string>("emailAddress");

您需要安装以下 nuget 包:Microsoft.Extensions.Configuration.JsonMicrosoft.Extensions.Configuration.ConfigurationBinder

如果您没有看到它,请确保您使用的是正确的 Feed。查看包管理器的 Package Source 组合框,它应该是 nuget.org

此外,请确保将 config.json 配置文件复制到输出中:

{
"emailAddress" : "some@example.com"
}

具体关于连接字符串,请查看此示例:https://learn.microsoft.com/en-us/ef/core/miscellaneous/connection-strings#aspnet-core

关于c# - 如何使用 .NET Core 配置框架将连接字符串放置到 json 配置文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46441075/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com