c# - 具有阴影属性的种子对象
问题描述
我正在尝试使用 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'.
属性“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"
}
);
}
}
如何播种使用阴影属性的数据?
解决方案
为了完整起见(因为我自己正在寻找解决方案),使用匿名类将是上面评论的解决方案:
modelBuilder.Entity<Brokerage>().HasData(new
{
Id = 1,
Name = "A Really Cool Object",
PhoneNumber = "1234567891",
CreatedBy = "sysdba",
Created = DateTime.Now,
ModifiedBy = "sysdba",
Modified = DateTime.Now
});
推荐阅读
- swiftui - 如何在 tvOS 上使用 SwiftUI 在多个水平列表之间导航
- sql-server - 将 SQL Server 存储过程添加到实体框架模型的推荐方法是什么
- ios - 如何在Xcode swift中为ui标签使用if语句
- react-native - 安装 Appodeal 后如何修复“程序类型已存在:com.reactlibrary.BuildConfig”
- react-native - 如何在 Ionic React 应用程序中固定 SSL 证书
- flutter - 如何仅使用 PageView 显示下一张卡片的边缘
- grails - Json 文件解析 - Groovy
- sql - SQL 查询从当前日期每周显示日期
- javascript - 因此返回一个 JSX 必然会使函数成为一个组件?
- typescript - NPM 仅安装后依赖项