2017-05-31 9 views
0

IdentityServer4バージョン1.5.2を数日間稼働させようとしています。私はVS2017を使用しています エンティティクラス、DataContexts、リポジトリおよび移行は.NET標準ライブラリ(1.6)にあります。これまでのところ、 "PersistenGrantDbContext"と "ConfigurationDbCOntext"のupdate-migrationコマンドを実行した場合を除いて、とてもうまくいきました。私は、エラーメッセージに私は自分自身が、私は2人の犯人の実装を持ってここインターフェース 「IDbContextFactory」を実施した後に、この問題を持っているように見えるいけない作成update 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. 

の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

私は物事が圧延するために何をしたのか分かりたかっただけです。 まず、私はそれはそれは私と私のマイグレーションを実行せずに、今、そのエラーを投げていたので、悪い考えであることが判明

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

.csprojクラスライブラリでこれをやってもそれが正しいアプローチであるかどうかわかりませんエラーを返す私のスタートアッププロジェクトとしてWebアプリケーションは、「見つかった名前何とか何とかしていないコンテキスト何とか何とかは」 は、だから、私は私が

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

    } 
} 

PersistentGrantDBCOntextとCOnfigurationGrantDbContext

のためにこれをやったので、自分がグリッチなしで働いて作成したコンテキストを実現しました
public ConfigDbContext(DbContextOptions<ConfigurationDbContext> options, ConfigurationStoreOptions storeOptions):base(options,storeOptions) 
    { 

    } 

すべてが円滑に進みました。 それは正しいアプローチであるかどうかだけではわかりません

+0

次の問題があります: 'PGrantDbContext'にパラメータのないコンストラクタが見つかりませんでした。 'PGrantDbContext'にパラメータのないコンストラクタを追加するか、 'PGrantDbContext'と同じアセンブリ内に 'IDbContextFactory 'の実装を追加してください。どのように解決しましたか? – CoffeeCode

0

私は数週間前にも同様の状況にありましたが、ここで私はそれを解決しました。あなたに非常に類似し

、私は、移行のための2つの私のアイデンティティ・プロジェクトとしてCompany.Identityと呼ばれるプロジェクト(.NETCoreApp)とCompany.Identity.Data.NETStandard 1.6)を持っています。私はCompany.Identityプロジェクトをマイグレーションのためのスタートアッププロジェクトとして使用しています。それは自分のデータプロジェクトと同じソリューションであり、マイグレーションのスタートアッププロジェクトと同じように別のプロジェクトでソリューションを混乱させたくありませんでした。

私はhereのチュートリアルに従いました。

cliツールリファレンス<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="1.0.1" />は、Company.Identity.csprojファイルにあります。

IはCompany.IdentityStartupクラスのConfigureServices方法において、以下の差

を除く上記のチュートリアルのすべての手順に従った、IはmigrationsAssembly

var migrationsAssembly = "Company.Identity.Data"; 

Company.Identity.Dataに注意Company.Identityすることを設定していますプロジェクトはすでにIdentityServer4.EntityFrameworkナゲットパッケージがインストールされています。これにより、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 

関連する問題