2017-05-31 58 views
0

我一直在試圖讓IdentityServer4版本1.5.2工作幾天沒有成功。我正在使用VS2017 My Entity類,DataContexts,存儲庫和遷移駐留在.Net標準庫(1.6)中。到目前爲止,除了當我爲「PersistenGrantDbContext」和「ConfigurationDbCOntext」運行update-migration命令時,這是非常好的。我得到的錯誤信息更新遷移命令失敗ConfigurationDbContext和PersistentGrantDbContext

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. 

,我創建自己似乎沒有執行「IDbContextFactory」界面 這裏我有兩個匪徒實施後有這個問題在DataContext類

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

而最新的一個版本號是4.1.0.0,如錯誤報告? – Mashton

+0

沒有最新版本是4.3.1,但我設法通過非正統手段解決它 –

回答

0

只是想分享我所做的事情,讓事情滾動。不知道這是雖然 首先我類庫中的.csproj

<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="1.0.1" /> 
<DotNetCliToolReference Include="Microsoft.Extensions.SecretManager.Tools" Version="1.0.1" /> 

現在竟然是一個壞主意,因爲這是拋出這個錯誤沒有它運行我的遷移與這樣做是正確的方法我Web應用程序作爲我開始了項目返回錯誤「沒有背景等等等等用的名字等等等等找到」 所以我意識到,我創造了自己的工作沒有毛刺,所以我沒有這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) 
    { 

    } 

一切都很順利。 只是不太確定是否是正確的做法雖然

+0

我有以下問題:'PGrantDbContext'上沒有找到無參數的構造函數。在'PGrantDbContext'中添加無參數構造函數,或者在與'PGrantDbContext'相同的程序集中添加'IDbContextFactory '實現。你是如何解決它的? – CoffeeCode

0

幾周前我也處於類似的情況,這是我如何解決它。

與您非常相似,我有兩個名爲Company.Identity.NETCoreApp)的項目作爲我的Identity項目和Company.Identity.Data.NETStandard 1.6)進行遷移。我使用Company.Identity Project作爲遷移目的的啓動項目,因爲它與我的數據項目處於相同的解決方案,並且我不想將另一個項目的解決方案與遷移的啓動項目混爲一談。

我按照教程here

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

我接着在除了以下區別

Company.IdentityStartupConfigureServices方法上面的教程的所有步驟,我已經設置了migrationsAssemblyCompany.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 

希望幫助