1. ホーム
  2. asp.net-mvc

[解決済み] DbContextOptionsBuilderでUseInMemoryDatabaseメソッドを呼び出せないのはなぜですか?

2022-05-14 07:12:02

質問

まず、SQL Liteが使えません。次に、以下のコードが表示されます。

エラー CS1061 'DbContextOptionsBuilder' は 'UseInMemoryDatabase' の定義を含んでおらず、タイプ 'DbContextOptionsBuilder' の最初の引数を受け入れる拡張メソッド 'UseInMemoryDatabase' は見つかりませんでした (using 命令またはアセンブリ参照が欠けていますか?)。

コードです。

 var options = new DbContextOptionsBuilder<ProductContext>()
                     .UseInMemoryDatabase(Guid.NewGuid().ToString())
                     .Options;
 var context = new ProductContext(options);

コンテキスト

using Memory.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;

namespace Memory.Data
{
    public class ProductContext : DbContext
    {
        public ProductContext(DbContextOptions<ProductContext> options) : base(options)
        {

        }
        public DbSet<Category> Categories { get; set; }
        public DbSet<Product> Products { get; set; }
    }
}

私のプロジェクトのCSPROJファイル

<ItemGroup>
    <PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.0.0" />
    <PackageReference Include="Microsoft.AspNetCore" Version="1.1.5" />
    <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="1.1.6" />
    <PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="1.1.3" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="1.1.5" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="1.1.0" />
    <PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="1.1.2" />
    <PackageReference Include="Microsoft.VisualStudio.Web.BrowserLink" Version="1.1.3" />
  </ItemGroup>

  <ItemGroup>
    <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="1.0.3" />
  </ItemGroup>

正確には、このメソッドが使えないだけなのです。私はその理由を理解していないようです。私はこの問題についての啓発を必要とします。

どのように解決するのですか?

によると EF Coreです。インメモリを使ったテスト のリファレンスでは Microsoft.EntityFrameworkCore.InMemory パッケージを使用するために UseInMemoryDatabase() 拡張メソッドに DbContextOptionsBuilder :

Install-Package Microsoft.EntityFrameworkCore.InMemory

あとは、quot;テストの書き方"の項にある例に従って、以下のようにします。

var options = new DbContextOptionsBuilder<ProductContext>().UseInMemoryDatabase(databaseName: "database_name").Options;

using (var context = new ProductContext(options))
{
    // add service here
}