2017-02-22 3 views
2

私は統合テストのためにInMemoryDatabaseを実装している.NETコアアプリケーションを開発中です。私はthis linkの指示に従っています。InMemory.TransactionManagerのget_CurrentTransactionに実装がありません

は、基本的には私がやったことあるAddDbContext法を用いた(Startup.csで)サービスを設定する方法を示していますし、私はUseInMemoryDatabaseへの呼び出します

public void ConfigureServices(IServiceCollection services) 
    {   
     services.AddDbContext<AppDbContext>(options => options.UseInMemoryDatabase()); 

     services.AddMvc(); 

     services.AddSingleton<ITodoRepository, TodoRepository>(); 
     services.AddScoped<IAssetRepository, AssetRepository>(); 
    } 

マイAppDbContextがで別のプロジェクトで定義されているが解決策そのように定義されています

:私はこのような設定方法をコーディングする必要がリンクに応じてバックStartup.csファイルへ

public class AppDbContext : DbContext 
{ 
    public AppDbContext(DbContextOptions<AppDbContext> dbContextOptions) : 
     base(dbContextOptions) 
    {    
    } 

    public DbSet<Asset> Assets { get; set; } 
    public DbSet<TodoItem> Todos { get; set; } 
} 

このスニペットは正常に実行され、GetServiceの呼び出しを実行します。この呼び出しは、AppDbContextのコンストラクタを実行しますが、コンストラクタはフォールリング例外でクラッシュします。基本コンストラクタ:base(dbContextOptions)を呼び出すとクラッシュします。

メソッド 'get_CurrentTransaction' タイプで 'Microsoft.EntityFrameworkCore.Storage.Internal.InMemoryTransactionManager' アセンブリから 'Microsoft.EntityFrameworkCore.InMemory、 バージョン= 1.0.1.0、文化=中立、なPublicKeyToken = adb9793829ddae60' 実装はありません。

私はこの例外の原因を突き止めることはできません。誰かが私にある方向を教えてくれますか?

ありがとうございます!

答えて

3

さらに調査したところ、構成コード(Startup.cs)を含むプロジェクトに「Microsoft.EntityFrameworkCore.InMemory」のバージョン1.0.1への参照が含まれていたため、このエラーが発生していることがわかりました。

しかし、私はそれを1.1.0に変更し、突然動作しました。だから私は実装がバージョン1.1.0に追加されたと仮定しています。

これは将来的に誰にでも役立ちます。

+0

Microsoft.EntityFrameworkCore.InMemoryのv2.0.1で同じエラーが発生しました.v2.0.0にロールバックすると解決されます。既視感。 –

関連する問題