In this post, I wrote about how you can test an EF Database, using an InMemory database.
I’m guessing a few people reading this will be thinking this is stating the bloody obvious, but it certainly wasn’t to me. Imagine you have a DBContext with some seed data; for example:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<EntityType1>().HasData(
new EntityType1
{
Id = "1",
Name = "Test1",
Description = "Testing",
IsTest = true,
SomeNumber = 1
},
In the above linked article, this seed data will never fire; however, simply calling:
context.Database.EnsureCreated();
Once the context is created, will force the migrations to be run inside the in-memory instance, and you should end up with a system mirroring what you would see, should you run this migration against a physical database.
Caveat Emptor
When using this against EF Core 2.2 I found, what appeared to be, this issue. The error being, while I was trying to insert a record, an error returned saying that an item with the same key exists on the table. However, no such item should exist. The linked article seems to imply that this relates to a bug with the insert for the in-memory database, and that it is resolved for EF Core 3.0. I haven’t validated this, so it may, or may not work to upgrade to EF Core 3.0. Please add a comment if you can validate or negate this.