Ho un modello EF con proprietà email di notifica. Le e-mail di notifica vengono salvate nel database come stringa separate da ';'. Ho aggiunto una conversione per recuperare i dati come ICollection nel modello. Funziona bene tranne una cosa: quando la stringa è nulla, anche la raccolta è nulla, e invece voglio convertirla in una raccolta vuota. È possibile?
//This is my code
entity.Property(e => e.NotificationEmails)
.HasConversion(
v => string.Join(",", v.Select(s => s.Trim())),
v => v.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries));
Ho provato ad aggiungere String.IsNullOrEmpty (v) ma EF lo ignora.
Al momento non è possibile:
https://docs.microsoft.com/en-us/ef/core/modeling/value-conversions#configuring-a-value-converter
Un valore null non verrà mai passato a un convertitore di valori. Ciò semplifica l'implementazione delle conversioni e consente di condividerle tra proprietà nullable e non nullable.
Ma forse in EF Core 5: https://github.com/dotnet/efcore/issues/13850
Non è elegante, ma puoi usare un campo di supporto:
public class Notification
{
private List<string> _emails = new List<string>();
public List<string> Emails
{
get => _emails;
set => _emails = value ?? new List<string>();
}
}
public class NotificationContext : DbContext
{
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Notification>().Property(d => d.Emails).HasConversion(
v => string.Join(",", v.Select(s => s.Trim())),
v => v.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).ToList()
);
modelBuilder.Entity<Notification>()
.Property(b => b.Emails)
.HasField("_emails")
.UsePropertyAccessMode(PropertyAccessMode.Property);
}
}
Nota: in cui un elenco vuoto non verrà tradotto da null, ma da una stringa vuota.