我一直试图让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仍然无法正常工作
答案 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项目并创建迁移然后再次添加来解决此问题。