Семенной объект со свойствами тени - PullRequest
0 голосов
/ 21 апреля 2020

Я пытаюсь заполнить объект, который использует теневые свойства, используя Entity Framework core 3.1, но когда я пытаюсь создать миграцию, я получаю:

The seed entity for entity type 'MyObject' cannot be added because there was no value provided for the required property 'Created'.

Свойство "Создано "это свойство тени, добавленное в OnModelCreating, поэтому у меня нет доступа к нему в конфигурации модели. В статье Microsoft Data Seeding говорится: «Если у типа сущности есть какие-либо свойства в теневом состоянии, для предоставления значений можно использовать анонимный класс ...» Я тоже это попробовал и получил ту же ошибку.

Вот моя конфигурация:

protected override void OnModelCreating( ModelBuilder modelBuilder )
{
    // Tried this before and after the shadow properties, same error
    modelBuilder.ApplyConfiguration( new MyObjectConfiguration() );

    // Tried to seed here too instead of in the MyObjectConfiguration
    //modelBuilder.Entity<Brokerage>().HasData( new
                            //{
                                //Id = 1,
                                //Name = "A Really Cool Object",
                                //PhoneNumber = "1234567891"
                            //} );

    // Create shadow properties
    foreach ( var entityType in modelBuilder.Model.GetEntityTypes()
          .Where( e => typeof( IAuditable ).IsAssignableFrom( e.ClrType ) ) )
    {
        modelBuilder.Entity( entityType.ClrType )
            .Property<DateTime>( "Created" );

        modelBuilder.Entity( entityType.ClrType )
            .Property<DateTime>( "Modified" );

        modelBuilder.Entity( entityType.ClrType )
            .Property<string>( "CreatedBy" );

        modelBuilder.Entity( entityType.ClrType )
            .Property<string>( "ModifiedBy" );
    }

    base.OnModelCreating( modelBuilder );
}


public class BrokerageConfiguration : IEntityTypeConfiguration<MyObject>
{
    public void Configure( EntityTypeBuilder<MyObject> builder )
    {
        ...

        //builder.Entity<MyObject>()
        //    .HasData( new { Id = 1, Name = "A Really Cool Object", PhoneNumber = "1234567891" } );

        builder.HasData
        (
            new MyObject
            {
                Id = 1,
                Name = "A Really Cool Object",
                PhoneNumber = "1234567891"
            }
        );
    }
}

Как я могу заполнить данные, которые используют свойства тени?

...