тестирование памяти ef core 5

#c# #.net-core #entity-framework-core #xunit

#c# #.net-ядро #entity-framework-core #xunit

Вопрос:

Я работаю над переходом с net core 3.1 на net 5 с тестированием репозиториев net core 3.1, использующих ef core, но после обновления до net core 5 SaveChanges в DbContext выдает исключение NullReferenceException

Вот трассировка стека

 at Microsoft.EntityFrameworkCore.Storage.ValueConversion.ValueConverter`2.<>c__DisplayClass3_0`2.<SanitizeConverter>b__0(Object v)
   at Microsoft.EntityFrameworkCore.InMemory.Storage.Internal.InMemoryTable`1.SnapshotValue(IProperty property, ValueComparer comparer, IUpdateEntry entry)
   at Microsoft.EntityFrameworkCore.InMemory.Storage.Internal.InMemoryTable`1.<>c__DisplayClass18_0.<Create>b__0(IProperty p)
   at System.Linq.Enumerable.SelectEnumerableIterator`2.ToArray()
   at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
   at Microsoft.EntityFrameworkCore.InMemory.Storage.Internal.InMemoryTable`1.Create(IUpdateEntry entry)
   at Microsoft.EntityFrameworkCore.InMemory.Storage.Internal.InMemoryStore.ExecuteTransaction(IList`1 entries, IDiagnosticsLogger`1 updateLogger)
   at Microsoft.EntityFrameworkCore.InMemory.Storage.Internal.InMemoryDatabase.SaveChanges(IList`1 entries)
   at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(IList`1 entriesToSave)
   at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(DbContext _, Boolean acceptAllChangesOnSuccess)
   at Microsoft.EntityFrameworkCore.Storage.NonRetryingExecutionStrategy.Execute[TState,TResult](TState state, Func`3 operation, Func`3 verifySucceeded)
   at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(Boolean acceptAllChangesOnSuccess)
   at Microsoft.EntityFrameworkCore.DbContext.SaveChanges(Boolean acceptAllChangesOnSuccess)
   at Microsoft.EntityFrameworkCore.DbContext.SaveChanges()
 

DbContext для тестов создается с использованием этих параметров

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

            using (_context = new DcmCockpitDbContext(options, null))
            {
                SeedDatabase(_context);
            }
 

Есть ли какие-либо критические изменения, которые вызывают это исключение?
Что я должен сделать, чтобы избежать этого?

Комментарии:

1. Это единственное критическое изменение, которое кажется применимым. Не могли бы вы использовать подобный код в своих тестах? docs.microsoft.com/en-us/ef/core/what-is-new/ef-core-5.0 /…

Ответ №1:

После длительных сеансов отладки проблема возникает из-за отсутствия зависимостей.