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# 如何为IdentityServer4实体框架核心迁移指定架构?_C#_Asp.net Core_Identityserver4_Ef Core 2.0 - Fatal编程技术网

C# 如何为IdentityServer4实体框架核心迁移指定架构?

C# 如何为IdentityServer4实体框架核心迁移指定架构?,c#,asp.net-core,identityserver4,ef-core-2.0,C#,Asp.net Core,Identityserver4,Ef Core 2.0,我正在使用IdentityServer4 2.0.2,并遵循了使用实体框架核心的步骤。我正在尝试在SQLServer中从默认模式(dbo)更改为自定义模式。以下代码工作正常,指示DBContext在“idsrv4”模式中查找表 在我的开发环境中,我使用以下代码从Startup.cs中的Configure()方法初始化数据库: var context = serviceScope.ServiceProvider.GetRequiredService<ConfigurationDbContex

我正在使用IdentityServer4 2.0.2,并遵循了使用实体框架核心的步骤。我正在尝试在SQLServer中从默认模式(dbo)更改为自定义模式。以下代码工作正常,指示DBContext在“idsrv4”模式中查找表

在我的开发环境中,我使用以下代码从Startup.cs中的Configure()方法初始化数据库:

var context = serviceScope.ServiceProvider.GetRequiredService<ConfigurationDbContext>();
context.Database.Migrate();
var context=serviceScope.ServiceProvider.GetRequiredService();
Migrate();

问题是这些表仍然是在dbo模式中创建的。如何指示Migrate()方法(来自Microsoft.EntityFrameworkCore)使用我提供的架构?

以下是我如何使其适用于.Net Core 1.1和IdentityServer 4 1.x的方法

在appsettings.json中添加了我的配置部分

"IdentityServerConfig": {
    "DBConfig": {
      "IdentityServer": "Data Source=dbservername.database.windows.net;User ID=user_Name;Password=password;Initial Catalog=DBNAme;",
      "DefaultSchema": "IDSVR"
    },
    "CertificateConfig": {
      "Thumbprint": "",
      "FileName": "cert.pfx",
      "SubDirectory": "",
      "PassPhrase": "password"
    },
    "RaiseErrorEvents": true,
    "RaiseFailureEvents": true,
    "RaiseInformationEvents": true,
    "RaiseSuccessEvents": true
  }
为IdentityServer的配置设置创建了一个类

public class IdentityServerConfig
    {
        public CertificateConfig CertificateConfig { get; set; }
        public DBConfig DBConfig { get; set; }

        public bool RaiseErrorEvents { get; set; }
        public bool RaiseFailureEvents { get; set; }
        public bool RaiseInformationEvents { get; set; }
        public bool RaiseSuccessEvents { get; set; }
    }

public void ConfigureServices(IServiceCollection services)
{
     ...Other Code

     var identityServerConfig = config.GetSection("IdentityServerConfig").Get<IdentityServerConfig>();


    var migrationsAssembly = typeof(Startup).GetTypeInfo().Assembly.GetName().Name; 


    builder = services.AddIdentityServer(options =>
            {
                options.Events.RaiseErrorEvents = identityServerConfig.RaiseErrorEvents ;
                options.Events.RaiseFailureEvents = identityServerConfig.RaiseFailureEvents ;
                options.Events.RaiseInformationEvents = identityServerConfig.RaiseInformationEvents ;
                options.Events.RaiseSuccessEvents = identityServerConfig.RaiseSuccessEvents ;
            })

     .AddConfigurationStore(
                     b => b.UseSqlServer(identityServerConfig.DBConfig.IdentityServer ,
                     options =>
                     {
                         options.MigrationsAssembly(migrationsAssembly);
                     }), storeOption =>
                     {
                         storeOption.DefaultSchema = identityServerConfig.DBConfig.DefaultSchema ;//IDSVR
                     })
     .AddOperationalStore(
                 b => b.UseSqlServer(identityServerConfig.DBConfig.IdentityServer,
                 options => options.MigrationsAssembly(migrationsAssembly)
                 ), storeOption => storeOption.DefaultSchema = identityServerConfig.DBConfig.DefaultSchema //IDSVR
                 );
}
公共类标识服务器配置
{
public CertificateConfig CertificateConfig{get;set;}
公共数据库配置数据库配置{get;set;}
公共bool RaiseErrorEvents{get;set;}
公共bool RaiseFailureEvents{get;set;}
公共bool raiseInformation事件{get;set;}
public bool RaiseSuccessEvents{get;set;}
}
public void配置服务(IServiceCollection服务)
{
…其他代码
var identityServerConfig=config.GetSection(“identityServerConfig”).Get();
var migrationassembly=typeof(Startup).GetTypeInfo().Assembly.GetName().Name;
生成器=服务。AddIdentityServer(选项=>
{
options.Events.RaiseErrorEvents=identityServerConfig.RaiseErrorEvents;
options.Events.RaiseFailureEvents=identityServerConfig.RaiseFailureEvents;
options.Events.RaiseInformationEvents=identityServerConfig.RaiseInformationEvents;
options.Events.RaiseSuccessEvents=identityServerConfig.RaiseSuccessEvents;
})
.AddConfigurationStore(
b=>b.UseSqlServer(identityServerConfig.DBConfig.IdentityServer,
选项=>
{
选项.migrationAssembly(migrationAssembly);
}),storeOption=>
{
storeOption.DefaultSchema=identityServerConfig.DBConfig.DefaultSchema;//IDSVR
})
.add商店(
b=>b.UseSqlServer(identityServerConfig.DBConfig.IdentityServer,
options=>options.MigrationsAssembly(MigrationsAssembly)
),storeOption=>storeOption.DefaultSchema=identityServerConfig.DBConfig.DefaultSchema//IDSVR
);
}

在创建迁移之前是否设置了
DefaultSchema
?我没有手动创建迁移。我刚刚调用了Migrate()并创建了我的数据库。为了测试,我正在删除数据库并再次运行应用程序。它在调用context.database.Migrate()方法时创建数据库。我应该在某处寻找编码迁移吗?项目中没有迁移文件夹。使用NuGet包中的EF模型是一个新领域。
Migrate
的状态将上下文的所有挂起迁移应用于数据库。如果数据库不存在,将创建该数据库。。这让我觉得您一定在某个地方有迁移类,它们已经设置为使用
dbo
。您是对的。我在几周前创建了迁移,但忘记了,这与我以前使用的不同。删除迁移后,我尝试按照中的说明运行
dotnet ef migrations add…
命令。这失败了,因为我从Startup.Configure()内部调用了context.Database.Migrate()。为了成功地重新创建迁移,我必须对Migrate()的调用进行注释。一旦重新创建,他们就拥有了预期的模式。然后我可以取消对Migrate()调用的注释并运行我的应用程序。您使用的是2.0吗?我得到“'ConfigurationStoreOptions'不包含'UseSqlServer'的定义”。这与我在其他地方看到的解决方案相同,但我猜在2.0中有所不同。这是使用.Net Core 1.1“ConfigurationStoreOptions”是“AddConfigurationStore()”的参数
public class IdentityServerConfig
    {
        public CertificateConfig CertificateConfig { get; set; }
        public DBConfig DBConfig { get; set; }

        public bool RaiseErrorEvents { get; set; }
        public bool RaiseFailureEvents { get; set; }
        public bool RaiseInformationEvents { get; set; }
        public bool RaiseSuccessEvents { get; set; }
    }

public void ConfigureServices(IServiceCollection services)
{
     ...Other Code

     var identityServerConfig = config.GetSection("IdentityServerConfig").Get<IdentityServerConfig>();


    var migrationsAssembly = typeof(Startup).GetTypeInfo().Assembly.GetName().Name; 


    builder = services.AddIdentityServer(options =>
            {
                options.Events.RaiseErrorEvents = identityServerConfig.RaiseErrorEvents ;
                options.Events.RaiseFailureEvents = identityServerConfig.RaiseFailureEvents ;
                options.Events.RaiseInformationEvents = identityServerConfig.RaiseInformationEvents ;
                options.Events.RaiseSuccessEvents = identityServerConfig.RaiseSuccessEvents ;
            })

     .AddConfigurationStore(
                     b => b.UseSqlServer(identityServerConfig.DBConfig.IdentityServer ,
                     options =>
                     {
                         options.MigrationsAssembly(migrationsAssembly);
                     }), storeOption =>
                     {
                         storeOption.DefaultSchema = identityServerConfig.DBConfig.DefaultSchema ;//IDSVR
                     })
     .AddOperationalStore(
                 b => b.UseSqlServer(identityServerConfig.DBConfig.IdentityServer,
                 options => options.MigrationsAssembly(migrationsAssembly)
                 ), storeOption => storeOption.DefaultSchema = identityServerConfig.DBConfig.DefaultSchema //IDSVR
                 );
}