私が正しく理解していれば、Status
単なる基本クラスであり、基本エンティティではありません データベースの継承に参加しています。
このような場合、Status
を絶対に参照しないことが重要です。 エンティティモデルと構成内のクラス、つまりDbSet<Status>
はありません 、タイプStatus
のナビゲーションプロパティはありません またはICollection<Status>
、modelBuilder.Entity<Status>()
はありません 呼び出しがあり、IEntityTypeConfiguration<Status>
はありません 。
代わりに、常にStatus
から継承する具象型を参照する必要があります 。構成コードを再利用するには、制約付きジェネリックを使用する必要があります メソッドまたはクラスを渡し、具体的なエンティティタイプを渡します。
IEntityTypeConfiguration
を使用しているため クラス、おそらく最も自然なのは、StatusConfiguration
を作成することです ジェネリッククラス:
public class StatusConfiguration<TEntity> : IEntityTypeConfiguration<TEntity>
where TEntity : Status
{
public virtual void Configure(EntityTypeBuilder<TEntity> builder)
{
builder.Property(c => c.updateUserName).IsRequired().HasMaxLength(50);
}
}
派生エンティティ構成クラスを派生させます:
public class ItemConfiguration : StatusConfiguration<Item>
{
public override void Configure(EntityTypeBuilder<Item> builder)
{
base.Configure(builder); // <--
builder.ToTable("Item", "dbo").HasKey(c => c.Id);
builder.Property(c => c.Description).IsRequired().HasMaxLength(100);
}
}