C#C
C#8mo ago
dvdmeer

Data seeding with anonymous objects in .NET 9

I recently began migrating some projects from .NET 8 to .NET 9. One of the things I now run into is the Seeding part with Entity Framework Core.
My seeding in my projects is done in the OnModelCreating and I add an extra environment variable to ensure that this part does not happen all the time.

I then use something like:
    modelBuilder.Entity<MyDtoClass>().HasData(
      new
      {
          ...
      });

The reason I am using anonymous objects is that I make use of shadow properties for several objects and I fill these properties in my override of SaveChangesAsync.
This way I just just add a couple of marker classes to some of my DTO objects like ICreateable, IUpdateable or ISoftDeletable and then these shadow properties are automatically filled when required.
For Seeding my data I generate certain information dynamically (e.g. GUIDs and dates/times) which has not been a problem in .NET 8 but I do turn off the warning I get:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    optionsBuilder.ConfigureWarnings(warnings => warnings.Ignore(RelationalEventId.PendingModelChangesWarning));
}

Now with .NET 9 there is a new way of seeding data. So, the data seeding happens somewhere else. The example Microsoft gives is at:
https://learn.microsoft.com/en-us/ef/core/what-is-new/ef-core-9.0/whatsnew#improved-data-seeding
context.Set<Blog>().Add(new Blog { Url = "http://test.com/" });
context.SaveChanges();

Unfortunately by using this context.Set<T>().Add method I am no longer able to add an anonymous object so it now becomes impossible for me to use with the shadow properties as they are not defined for my DTOs. How can I handle this scenario without going back to the old way?
Overview of new features in EF Core 9
Was this page helpful?