3
抽象基本クラスから派生した2つのエンティティがあり、コンクリート型テーブルを実装したいとします。EFコアで抽象基本クラスの流暢なマッピングを使用するテーブルごとに実装する
public abstract class EntityBase
{
public int Id { get; set; }
public string CreatedBy { get; set; }
public DateTime CreatedAt { get; set; }
}
public class Person : EntityBase
{
public string Name { get; set; }
}
public class PersonStatus : EntityBase
{
public string Title { get; set; }
}
そして、あなたは抽象基底クラス(EntityBase)で属性を使用する必要はありませんが、あなたは一度だけすべてのエンティティのためにdbcontext でEntityBaseクラスをマッピングしたい:以下のようなエンティティ。あなたはBaseClassのために設定を記述する必要があります。..
を
public class PeopleDbContext : DbContext
{
public DbSet<Person> People { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
// Entity base class mapping(only once)
modelBuilder.Entity<Person>(e =>
{
e.Property(x => x.Name)
.IsRequired()
.HasMaxLength(100);
});
modelBuilder.Entity<PersonStatus>(e =>
{
e.Property(x => x.Title)
.IsRequired()
.HasMaxLength(100);
});
}
}
何か試しましたか?私はこれのような設定を持っており、IDは慣例によって選ばれる。 –
はい、dbcontextで(流暢な)EntityBaseクラスをマップしようとしましたが、EntityBaseクラスの別のテーブルが作成されました。これまでは、流暢なnhibernateを実装していましたが、これはClassMapを使用して正しく動作しました。 また、私はef 6 "builder.Types(..)"を使用しました。それは私が望むように働いた。しかし、コアと私はそれを作ることができませんでした。 –