Migrations: when adding required column with custom converter and unspecified default value to existing table, we don't pass through converter to generate the default "empty" value
- Dominant language
- C#
- Stars
- 14.8k
- Forks
- 3.4k
- PR merge metrics
- PR metrics pending
Description
Example model migrated from:
```
builder.Entity(
"Customer", e =>
{
e.Property("Id").ValueGeneratedOnAdd();
e.HasKey("Id");
e.Property("Name");
e.ToTable("Customers");
}
```
model migrated to:
```
builder.Entity(
"Customer", e =>
{
e.Property("Id").ValueGeneratedOnAdd();
e.HasKey("Id");
e.Property("Name");
e.Property>("Numbers").HasConversion(new ValueConverter, string>(
convertToProviderExpression: x => x != null && x.Count > 0 ? "some numbers" : "nothing",
convertFromProviderExpression: x => x == "nothing" ? new List { } : new List { 7, 8, 9 })).IsRequired();
e.ToTable("Customers");
})
```
sql:
```sql
ALTER TABLE [Customers] ADD [Numbers] nvarchar(max) NOT NULL DEFAULT N'';
```
I would expect to see:
```sql
ALTER TABLE [Customers] ADD [Numbers] nvarchar(max) NOT NULL DEFAULT N'nothing';
```
However, if we specify default value ourselves like so:
```
builder.Entity(
"Customer", e =>
{
e.Property("Id").ValueGeneratedOnAdd();
e.HasKey("Id");
e.Property("Name");
e.Property>("Numbers").HasConversion(new ValueConverter, string>(
convertToProviderExpression: x => x != null && x.Count > 0 ? "some numbers" : "nothing",
convertFromProviderExpression: x => x == "nothing" ? new List { } : new List { 7, 8, 9 }))
.HasDefaultValue(new List { 42 })
.IsRequired();
e.ToTable("Customers");
})
```
we generate expected migration sql:
```sql
ALTER TABLE [Customers] ADD [Numbers] nvarchar(max) NOT NULL DEFAULT N'some numbers';
```
Contributor guide
Assessment
This issue has not been assessed yet.