When there is an entity with a Guid property and a .HasConversion<byte[]>() on it. And it is already in the modelsnapshot and even rolled out to a database. Adding a migration or even running a not rolled out migration (created with EFCore 7.0, rolled out with version 8). A NullReferenceException got thrown.
Include your code
// In a IEntityTypeConfiguration Configuration
builder
.Property(entity => entity.Id)
.HasConversion<byte[]>()
.ValueGeneratedOnAdd();
// Results in a Snapshot
b.Property<byte[]>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("RAW(16)")
.HasColumnName("ID")
.HasColumnOrder(0);
It seems that adding a migration only works after removing the
.HasConversion<byte[]>()
And changing the property in the snapshot from byte[] to Guid.
add-migration will work after this change, but update-database still fails
Stack trace
System.NullReferenceException: Object reference not set to an instance of an object.
at Microsoft.EntityFrameworkCore.Storage.RelationalTypeMappingSource.FindCollectionMapping(RelationalTypeMappingInfo info, Type modelType, Type providerType, CoreTypeMapping elementMapping)
at Microsoft.EntityFrameworkCore.Storage.RelationalTypeMappingSource.<>c.<FindMappingWithConversion>b__8_0(ValueTuple`4 k, RelationalTypeMappingSource self)
at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd[TArg](TKey key, Func`3 valueFactory, TArg factoryArgument)
at Microsoft.EntityFrameworkCore.Storage.RelationalTypeMappingSource.FindMappingWithConversion(RelationalTypeMappingInfo mappingInfo, Type providerClrType, ValueConverter customConverter)
at Microsoft.EntityFrameworkCore.Storage.RelationalTypeMappingSource.FindMappingWithConversion(RelationalTypeMappingInfo mappingInfo, IReadOnlyList`1 principals)
at Microsoft.EntityFrameworkCore.Storage.RelationalTypeMappingSource.FindMapping(IProperty property)
at Microsoft.EntityFrameworkCore.Metadata.Internal.Property.<>c.<get_TypeMapping>b__91_0(IProperty property)
at Microsoft.EntityFrameworkCore.Internal.NonCapturingLazyInitializer.EnsureInitialized[TParam,TValue](TValue& target, TParam param, Func`2 valueFactory)
at Microsoft.EntityFrameworkCore.Metadata.Internal.Property.get_TypeMapping()
at Microsoft.EntityFrameworkCore.Metadata.Internal.Property.Microsoft.EntityFrameworkCore.Metadata.IReadOnlyProperty.FindTypeMapping()
at Microsoft.EntityFrameworkCore.RelationalPropertyExtensions.FindRelationalTypeMapping(IReadOnlyProperty property)
at Microsoft.EntityFrameworkCore.RelationalPropertyExtensions.GetColumnType(IReadOnlyProperty property)
at Microsoft.EntityFrameworkCore.RelationalPropertyExtensions.GetColumnType(IProperty property)
at Microsoft.EntityFrameworkCore.Metadata.Internal.RelationalModel.AddDefaultMappings(RelationalModel databaseModel, IEntityType entityType, IRelationalTypeMappingSource relationalTypeMappingSource)
at Microsoft.EntityFrameworkCore.Metadata.Internal.RelationalModel.Create(IModel model, IRelationalAnnotationProvider relationalAnnotationProvider, IRelationalTypeMappingSource relationalTypeMappingSource, Boolean designTime)
at Microsoft.EntityFrameworkCore.Metadata.Internal.RelationalModel.Add(IModel model, IRelationalAnnotationProvider relationalAnnotationProvider, IRelationalTypeMappingSource relationalTypeMappingSource, Boolean designTime)
at Microsoft.EntityFrameworkCore.Infrastructure.RelationalModelRuntimeInitializer.InitializeModel(IModel model, Boolean designTime, Boolean prevalidation)
at Microsoft.EntityFrameworkCore.Infrastructure.ModelRuntimeInitializer.Initialize(IModel model, Boolean designTime, IDiagnosticsLogger`1 validationLogger)
at Microsoft.EntityFrameworkCore.Migrations.Internal.SnapshotModelProcessor.Process(IReadOnlyModel model)
at Microsoft.EntityFrameworkCore.Migrations.Design.MigrationsScaffolder.ScaffoldMigration(String migrationName, String rootNamespace, String subNamespace, String language)
at Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.AddMigration(String name, String outputDir, String contextType, String namespace)
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.AddMigrationImpl(String name, String outputDir, String contextType, String namespace)
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.AddMigration.<>c__DisplayClass0_0.<.ctor>b__0()
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.<>c__DisplayClass3_0`1.<Execute>b__0()
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action)
Applying migration '20231128143139_xxxx'.
2023-12-20 14:14:01.752474 ThreadID:1 (ENTRY) OracleMigrator.GenerateUpSql()
2023-12-20 14:14:01.772051 ThreadID:1 (EXIT) OracleMigrator.GenerateUpSql()
'Weatherontext' disposed.
Disposing connection to database '' on server 'xxxx'.
Disposed connection to database '' on server '' (0ms).
System.NullReferenceException: Object reference not set to an instance of an object.
Include provider and version information
EF Core version: 8.0.0
Database provider: Oracle.EntityFrameworkCore (8.21.121)
Target framework: .Net 8.0
Operating system: Windows 11 (23H2)
IDE: Visual Studio 2022 (17.8.3)
File a bug
When there is an entity with a Guid property and a .HasConversion<byte[]>() on it. And it is already in the modelsnapshot and even rolled out to a database. Adding a migration or even running a not rolled out migration (created with EFCore 7.0, rolled out with version 8). A NullReferenceException got thrown.
Include your code
It seems that adding a migration only works after removing the
And changing the property in the snapshot from byte[] to Guid.
add-migration will work after this change, but update-database still fails
Stack trace
Include verbose output
Add-Migration
Update-Database (snippet)
Include provider and version information
EF Core version: 8.0.0 Database provider: Oracle.EntityFrameworkCore (8.21.121) Target framework: .Net 8.0 Operating system: Windows 11 (23H2) IDE: Visual Studio 2022 (17.8.3)