Я пытаюсь заполнить объект, который использует теневые свойства, используя 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"
}
);
}
}
Как я могу заполнить данные, которые используют свойства тени?