UseInMemoryDatabase и сохранить коллекцию - PullRequest
0 голосов
/ 10 июля 2020

Как сделать так, чтобы элементы, добавленные в коллекцию inmemory, были доступны немедленно, как это было бы с обычным контекстом базы данных с поддержкой базы данных?

// Init

var builder = new DbContextOptionsBuilder<MyContext>();
builder.UseInMemoryDatabase("my_in_memory");
this.InMemoryDbContext = new MyContext(builder.Options);

// Setup

InMemoryDbContext.SomeCollection.Add(itemOfMatchingType);

// Assert (1) --< it fails 
Assert.AreEqual(1, InMemoryDbContext.SomeCollection.Count());

// Another assert (2) <-- now it works
InMemoryDbContext.SaveChanges();
Assert.AreEqual(1, InMemoryDbContext.SomeCollection.Count());

1 Ответ

1 голос
/ 10 июля 2020

Протестировано с помощью SQLite и для последней версии EF Core, первое утверждение не работает с DatabaseContext, поддерживаемым db. Если вы хотите утверждать, что добавлено в текущий контекст, вам необходимо проанализировать ChangeTracker:

Assert.AreEqual(1, InMemoryDbContext.ChangeTracker.Entries<MatchingType>().Count());
...