Naming a migration "DateTimeOffset" doesn't work
See original GitHub issueHi,
we added a migration that alters a property type from DateTime
to DateTimeOffset
. The Migration itself looks as follows:
public partial class DateTimeOffset : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AlterColumn<DateTimeOffset>(
name: "LastModified",
schema: "dbo",
table: "Test",
type: "datetimeoffset",
nullable: false,
oldClrType: typeof(DateTime),
oldType: "datetime2");
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.AlterColumn<DateTime>(
name: "LastModified",
schema: "dbo",
table: "Test",
type: "datetime2",
nullable: false,
oldClrType: typeof(DateTimeOffset),
oldType: "datetimeoffset");
}
}
Unfortunately, after this migration is created, calls to dotnet ef migrations add
fail with the following exception:
System.NullReferenceException: Object reference not set to an instance of an object.
at Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationsModelDiffer.Initialize(ColumnOperation columnOperation, IColumn column, RelationalTypeMapping typeMapping, Boolean isNullable, IEnumerable`1 migrationsAnnotations, Boolean inline)
at Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationsModelDiffer.Diff(IColumn source, IColumn target, DiffContext diffContext)+MoveNext()
at Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationsModelDiffer.DiffCollection[T](IEnumerable`1 sources, IEnumerable`1 targets, DiffContext diffContext, Func`4 diff, Func`3 add, Func`3 remove, Func`4[] predicates)+MoveNext()
at System.Linq.Enumerable.ConcatIterator`1.MoveNext()
at Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationsModelDiffer.Diff(ITable source, ITable target, DiffContext diffContext)+MoveNext()
at Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationsModelDiffer.DiffCollection[T](IEnumerable`1 sources, IEnumerable`1 targets, DiffContext diffContext, Func`4 diff, Func`3 add, Func`3 remove, Func`4[] predicates)+MoveNext()
at System.Linq.Enumerable.ConcatIterator`1.MoveNext()
at Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationsModelDiffer.Sort(IEnumerable`1 operations, DiffContext diffContext)
at Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationsModelDiffer.GetDifferences(IRelationalModel source, IRelationalModel target)
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)
Object reference not set to an instance of an object.
We were also able to reproduce that issue in a sample project that only contains an inital migration that creates the table and adds a column for a property of type DateTime
and the migration shown above,
We used ef version 5.0.7 to create the migrations
_/\__
---==/ \\
___ ___ |. \|\
| __|| __| | ) \\\
| _| | _| \_/ | //|\\
|___||_| / \\\/\\
Entity Framework Core .NET Command-line Tools 5.0.7
Could you help us solve our issue? Is something wrong with our migration?
Kind regards, Manuel Gutekunst
Issue Analytics
- State:
- Created 2 years ago
- Comments:7 (4 by maintainers)
Top Results From Across the Web
Entity Framework Core Won't Map DateTimeOffSet in Code ...
I'm trying to run Add-Migration after changing my model to DateTimeOffset however it produces the error. The property 'Session.
Read more >EF code first migration does not map DateTimeOffset to ...
I managed to make the mapping to the expected type by changing the .net data type to DateTime and the column type name...
Read more >Converting between DateTime and DateTimeOffset
It returns a DateTime value whose Kind property is Utc. If the Offset property value doesn't equal TimeSpan.Zero, it converts the time to...
Read more >Why Use DateTimeOffset | Blog
We'll fix the issue, probably by using DateTimeOffset, and chalk it up as another learning experience for the group based on the open...
Read more >A Warning For EF Core's DateTimeOffsetToBinaryConverter
I recently had some troubles sorting and filtering a DateTimeOffsetToBinaryConverter column in a SQLite database using ef-core.
Read more >
Top Related Medium Post
No results found
Top Related StackOverflow Question
No results found
Troubleshoot Live Code
Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free
Top Related Reddit Thread
No results found
Top Related Hackernoon Post
No results found
Top Related Tweet
No results found
Top Related Dev.to Post
No results found
Top Related Hashnode Post
No results found
Triage discussion - if we see other people hitting this, we may add something to the type name for the migration (e.g. the timestamp, like we already do in the file name).
oh…
thanks for claryfying @roji . Renaming the Migrations class solved our issue.