#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:
После длительных сеансов отладки проблема возникает из-за отсутствия зависимостей.