2016-01-21 5 views
4

Есть ли способ создать отдельный (изолированный) экземпляр EF7 в базе данных памяти? Я использую базу данных памяти в Entity Framework 7 в своих модульных тестах, написанных на xUnit. Я хотел бы иметь возможность запускать тесты параллельно, но это не реально, поскольку для всех тестов используется то же самое в базе данных памяти. Я бы хотел, чтобы каждый тест имел свою изолированную в памяти базу данных, которая не используется совместно с другими тестами, которые работают параллельно.Отдельные в памяти Базы данных EF7

ответ

0

Так что я еще не перешел на EF7 (все еще на EF6), но аналогичные проблемы с внутренним синглетоном в DbContext существуют (я думаю, что это кеширование DbCompiledModel, и наша проблема была связана с сопоставлениями, которые меняются во время выполнения, поэтому не совсем то же самое, что и у вас). В любом случае, попытайтесь создать их явно для каждой тестовой коллекции.

Если вы не получаете никакого повышения скорости, заслуживающего внимания, вы можете использовать атрибут [Collection("Memory Database Tests")], чтобы убедиться, что тесты, выполняемые с той же базой данных базы данных, не запускаются параллельно (https://gist.github.com/bradwilson/8423477).

5

В EF Core вы можете передать имя db для контекста db InMemory.

Что-то вроде

var builder = new DbContextOptionsBuilder(); 
builder.UseInMemoryDatabase($"database{Guid.NewGuid()}"); 
+0

Это работало для меня очень хорошо, спасибо! –