更新ConfigurationDbContext和PersistentGrantDbContext的迁移命令失败

时间:2017-05-31 17:23:24

标签: asp.net-core identityserver4

我一直试图让IdentityServer4版本1.5.2工作几天而没有成功。我正在使用VS2017 我的实体类,DataContexts,存储库和迁移都驻留在.Net标准库(1.6)中。到目前为止,除非我为“PersistenGrantDbContext”和“ConfigurationDbCOntext”运行update-migration命令。我收到错误消息

Could not load file or assembly 'System.Data.SqlClient, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. The system cannot find the file specified.

我自己创建的datacontext类在实现“IDbContextFactory”接口后似乎没有这个问题 在这里,我有两个罪犯的实现

public class TemporaryDbContextFactoryScopes : IDbContextFactory<PersistedGrantDbContext>
{
    public PersistedGrantDbContext Create(DbContextFactoryOptions options)
    {
        var builder = new DbContextOptionsBuilder<PersistedGrantDbContext>();
        builder.UseSqlServer("Server=-------;Database=-----------;Trusted_Connection=True;MultipleActiveResultSets=true",
            optionsBuilder => optionsBuilder.MigrationsAssembly(typeof(UserDbContext).GetTypeInfo().Assembly.GetName().Name));
        return new PersistedGrantDbContext(builder.Options, new OperationalStoreOptions());
    }
}

public class TemporaryDbContextFactoryOperational : IDbContextFactory<ConfigurationDbContext>
{
    public ConfigurationDbContext Create(DbContextFactoryOptions options)
    {
        var builder = new DbContextOptionsBuilder<ConfigurationDbContext>();
        builder.UseSqlServer("Server=---------;Database=--------;Trusted_Connection=True;MultipleActiveResultSets=true",
            optionsBuilder => optionsBuilder.MigrationsAssembly(typeof(UserDbContext).GetTypeInfo().Assembly.GetName().Name));

        return new ConfigurationDbContext(builder.Options, new ConfigurationStoreOptions());
    }
}

我安装了最新版本的System.Data.SqlClient仍然无法正常工作

3 个答案:

答案 0 :(得分:0)

只想分享我所做的事情,以便让事情顺利进行。不确定这是否是正确的方法 首先,我在类库.csproj

中完成了这个
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="1.0.1" />
<DotNetCliToolReference Include="Microsoft.Extensions.SecretManager.Tools" Version="1.0.1" />

结果是一个坏主意,因为现在抛出该错误而没有使用我的网络应用程序运行我的迁移,因为我的启动项目返回错误&#34;没有上下文等等等等等等等等等等等等等等等。 34; 所以我意识到我自己创建的上下文没有毛刺,所以我为PersistentGrantDBCOntext和COnfigurationGrantDbContext做了这个

 public class PGrantDbContext: PersistedGrantDbContext
{
    public PGrantDbContext(DbContextOptions<PersistedGrantDbContext> options, OperationalStoreOptions storeOptions) : base(options, storeOptions)
    {

    }
}

 public ConfigDbContext(DbContextOptions<ConfigurationDbContext> options, ConfigurationStoreOptions storeOptions):base(options,storeOptions)
    {

    }

一切顺利。 只是不确定它是否是正确的方法

答案 1 :(得分:0)

几周前我也处于类似情况,这就是我如何解决它的问题。

与您的非常相似,我有两个名为Company.Identity.NETCoreApp)的项目作为我的身份项目,Company.Identity.Data.NETStandard 1.6)用于迁移。我使用Company.Identity Project作为迁移目的的启动项目,因为它与我的数据项目在同一个解决方案中,我不想将另一个项目作为迁移的启动项目混淆解决方案。

我按照here中的教程。

cli工具参考<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="1.0.1" />位于我的Company.Identity.csproj文件中。

我按照上述教程中的所有步骤进行了操作,但以下差异除外

ConfigureServices Company.Identity课程的Startup方法中,我已将migrationsAssembly设为Company.Identity.Data

var migrationsAssembly = "Company.Identity.Data";

请注意,Company.Identity项目已安装IdentityServer4.EntityFramework nuget包。这使我能够为PersistedGrantDbContext添加迁移。但是当我尝试为ConfigurationDbContext运行迁移时,它给了我一个构建错误。这是因为为PersistedGrantDbContext生成的迁移需要IdentityServer4.EntityFramework nuget包。所以我必须在Company.Identity.Data project

中安装它

在我的Company.Identity项目中通过命令提示符进行上述更改后,我能够使用以下命令添加迁移。

dotnet ef migrations add InitialIdentityServerPersistedGrantDbMigration -c PersistedGrantDbContext -o Migrations/IdentityServer/PersistedGrantDb -p ../Company.Identity.Data

dotnet ef migrations add InitialIdentityServerConfigurationDbMigration -c ConfigurationDbContext -o Migrations/IdentityServer/ConfigurationDb -p ../Company.Identity.Data

希望有所帮助

答案 2 :(得分:0)

如果您的项目中有docker-compose,这可能对您特别有帮助。我能够通过删除docker-compose项目并创建迁移然后再次添加来解决此问题。

https://stackoverflow.com/a/60320410/4977086