Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我可以从EF Core迁移访问appsettings吗?_C#_Asp.net Core_Entity Framework Core - Fatal编程技术网

C# 我可以从EF Core迁移访问appsettings吗?

C# 我可以从EF Core迁移访问appsettings吗?,c#,asp.net-core,entity-framework-core,C#,Asp.net Core,Entity Framework Core,我需要通过添加SQL脚本手动修改代码优先迁移。脚本并不完全是一个问题,但我还想向脚本中注入一些将在appsettings.json中设置的内容。除了导航到文件路径并手动读取内容外,是否可以通过其他方式访问此配置?您的意思是要在migration.cs文件中获取appsettings值 如果这是您的需求,您可以使用ConfigurationBuilder并设置appsetting.json路径来读取它 更多详细信息,请参考以下代码: public partial class Modify5 : M

我需要通过添加SQL脚本手动修改代码优先迁移。脚本并不完全是一个问题,但我还想向脚本中注入一些将在appsettings.json中设置的内容。除了导航到文件路径并手动读取内容外,是否可以通过其他方式访问此配置?

您的意思是要在migration.cs文件中获取appsettings值

如果这是您的需求,您可以使用
ConfigurationBuilder
并设置appsetting.json路径来读取它

更多详细信息,请参考以下代码:

public partial class Modify5 : Migration
{
    protected override void Up(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.DropColumn(
            name: "Msg",
            table: "Logs");

        migrationBuilder.DropColumn(
            name: "Timestamp",
            table: "Logs");

        migrationBuilder.AddColumn<DateTime>(
            name: "CreatedDate",
            table: "Logs",
            nullable: false,
            defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified));

        migrationBuilder.AddColumn<DateTime>(
            name: "CreatedDate2",
            table: "Logs",
            nullable: false,
            defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified));

        migrationBuilder.AddColumn<string>(
            name: "Message",
            table: "Logs",
            nullable: true);

        string re = GetParameters();
        Console.WriteLine("Save");
        Console.WriteLine(re);
    }

    protected override void Down(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.DropColumn(
            name: "CreatedDate",
            table: "Logs");

        migrationBuilder.DropColumn(
            name: "CreatedDate2",
            table: "Logs");

        migrationBuilder.DropColumn(
            name: "Message",
            table: "Logs");

        migrationBuilder.AddColumn<string>(
            name: "Msg",
            table: "Logs",
            type: "nvarchar(max)",
            nullable: true);

        migrationBuilder.AddColumn<DateTime>(
            name: "Timestamp",
            table: "Logs",
            type: "datetime2",
            nullable: false,
            defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified));

  
    }

    private static string GetParameters()
    {
        var builder = new ConfigurationBuilder()
                            .SetBasePath(@"the application root path")
                            .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);

        var val1 = builder.Build().GetSection("AllowedHosts").Value;

        return $"The values of parameters are: {val1}";
    }
}
公共部分类修改5:迁移
{
受保护的覆盖作废(MigrationBuilder MigrationBuilder)
{
migrationBuilder.DropColumn(
名称:“Msg”,
表:“日志”);
migrationBuilder.DropColumn(
名称:“时间戳”,
表:“日志”);
migrationBuilder.AddColumn(
名称:“CreatedDate”,
表:“日志”,
可为空:false,
defaultValue:new DateTime(1,1,1,0,0,0,DateTimeKind.Unspecified));
migrationBuilder.AddColumn(
名称:“CreatedDate2”,
表:“日志”,
可为空:false,
defaultValue:new DateTime(1,1,1,0,0,0,DateTimeKind.Unspecified));
migrationBuilder.AddColumn(
名称:“消息”,
表:“日志”,
可为空:真);
字符串re=GetParameters();
控制台。写入线(“保存”);
控制台写入线(re);
}
受保护的覆盖无效关闭(MigrationBuilder MigrationBuilder)
{
migrationBuilder.DropColumn(
名称:“CreatedDate”,
表:“日志”);
migrationBuilder.DropColumn(
名称:“CreatedDate2”,
表:“日志”);
migrationBuilder.DropColumn(
名称:“消息”,
表:“日志”);
migrationBuilder.AddColumn(
名称:“Msg”,
表:“日志”,
类型:“nvarchar(最大)”,
可为空:真);
migrationBuilder.AddColumn(
名称:“时间戳”,
表:“日志”,
类型:“datetime2”,
可为空:false,
defaultValue:new DateTime(1,1,1,0,0,0,DateTimeKind.Unspecified));
}
私有静态字符串GetParameters()
{
var builder=new ConfigurationBuilder()
.SetBasePath(@“应用程序根路径”)
.AddJsonFile(“appsettings.json”,可选:true,reloadOnChange:true);
var val1=builder.Build().GetSection(“AllowedHosts”).Value;
return$“参数值为:{val1}”;
}
}
结果:


我很好奇你为什么要这么做-你想用这个解决什么问题?也许有一个更优雅的解决方案。我需要为同一台服务器上的不同数据库的MSSQL文件表设置不同的文件夹。除了通过SQL实现这一点之外,没有其他方法,我更希望在迁移中保留这一点。我不知道是否有更优雅的方法来实现您想要实现的目标,但无论如何。您是否尝试在迁移中注入IConfiguration接口?您可以替换
imiglationsAssembly
服务(),我会将您的注释标记为答案,因为这正是我解决此问题的方法,我将编写与解决方案相同的内容。但我需要补充一点。在我使用集成测试的测试项目中(使用WebHostBuilder,使用真实的数据库等等),当迁移应用到数据库时,appsettings.json将不会来自测试项目,但它将以某种方式从Web Api复制。所以,在进行集成测试时,最好将appsettings.json命名为与我们正在测试的项目不同的名称。