Reputation: 1639
First off, I can't use SQL Lite. Secondly the code below is giving me:
Error CS1061 'DbContextOptionsBuilder' does not contain a definition for 'UseInMemoryDatabase' and no extension method 'UseInMemoryDatabase' accepting a first argument of type 'DbContextOptionsBuilder' could be found (are you missing a using directive or an assembly reference?)
The code:
var options = new DbContextOptionsBuilder<ProductContext>()
.UseInMemoryDatabase(Guid.NewGuid().ToString())
.Options;
var context = new ProductContext(options);
Context
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; }
}
}
My project CSPROJ file
<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>
The exact problem is that the method is just not available. I don't seem to understand why. I require enlightenment on this issue.
Upvotes: 160
Views: 115865
Reputation: 24957
According to EF Core: Testing with InMemory reference, you need to add the Microsoft.EntityFrameworkCore.InMemory package to use UseInMemoryDatabase()
extension method with DbContextOptionsBuilder
.
From Visual Studio's Package Manager console:
Install-Package Microsoft.EntityFrameworkCore.InMemory
Or use the cli command:
dotnet add package Microsoft.EntityFrameworkCore.InMemory
Afterwards, you can follow example given in "Writing tests" section like this:
var options = new DbContextOptionsBuilder<ProductContext>().UseInMemoryDatabase(databaseName: "database_name").Options;
using (var context = new ProductContext(options))
{
// add service here
}
Upvotes: 343
Reputation: 618
In Mac, open terminal in project directory or In Visual Studio Right click on project -> Tools -> Open in Terminal.
In the terminal install package by following command->
dotnet add package Microsoft.EntityFrameworkCore.InMemory
Upvotes: 12
Reputation: 8877
Tools(menu) -> NuGet Package Manager -> Package Manager Console then type dotnet add package Microsoft.EntityFrameworkCore.InMemory
Tools(menu) -> NuGet Package Manager -> Manage NuGet Packages for solution -> NuGet (tab that opened up) -> search for "inmemory" -> Select Microsoft.EntityFrameworkCore.InMemory -> Check the box Project -> Install(button)
On the bottom of the screen, select Terminal(tab) then type dotnet add package Microsoft.EntityFrameworkCore.InMemory
Upvotes: 17
Reputation: 59
Check in your NuGet Package Manager => Manage Packages for Solution, check all this packages, whether got installed in your solution or not, as below:
I solved the same issues after check all the above packages been installed.
Upvotes: 0
Reputation: 1573
You need it to use UseInMemoryDatabase
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="3.0.0" />
</ItemGroup>
Upvotes: 13