【发布时间】:2018-04-09 06:05:01
【问题描述】:
在 EF Core 2.0 中,我们能够从 IEntityTypeConfiguration 派生以获得更清晰的 Fluent API 映射 (source)。
如何扩展此模式以利用基本实体?在下面的示例中,我如何使用BaseEntityConfiguration 来减少LanguageConfiguration 和MaintainerConfiguration 中的重复,仅修改BaseEntity 中的属性BaseEntityConfiguration?这样的BaseEntityConfiguration 会是什么样子?如果有的话,它将如何在OnModelCreating() 中使用?请参阅示例末尾附近的代码中的 TODO。
例子:
public abstract class BaseEntity
{
public long Id { get; set; }
public DateTime CreatedDateUtc { get; set; }
public DateTime? ModifiedDateUtc { get; set; }
}
public class Language : BaseEntity
{
public string Iso6392 { get; set; }
public string LocalName { get; set; }
public string Name { get; set; }
}
public class Maintainer : BaseEntity
{
public string Email { get; set; }
public string Name { get; set; }
}
public class FilterListsDbContext : DbContext
{
public FilterListsDbContext(DbContextOptions options) : base(options)
{
}
public DbSet<Language> Languages { get; set; }
public DbSet<Maintainer> Maintainers { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
//TODO: Possibly add something like BaseEntityConfiguration?
modelBuilder.ApplyConfiguration(new LanguageConfiguration());
modelBuilder.ApplyConfiguration(new MaintainerConfiguration());
}
}
public class LanguageConfiguration : IEntityTypeConfiguration<Language>
{
public void Configure(EntityTypeBuilder<Language> entityTypeBuilder)
{
//TODO: Move this to something like BaseEntityConfiguration?
entityTypeBuilder.Property(b => b.CreatedDateUtc).HasDefaultValueSql("CURRENT_TIMESTAMP");
}
}
public class MaintainerConfiguration : IEntityTypeConfiguration<Maintainer>
{
public void Configure(EntityTypeBuilder<Maintainer> entityTypeBuilder)
{
//TODO: Move this to something like BaseEntityConfiguration?
entityTypeBuilder.Property(b => b.CreatedDateUtc).HasDefaultValueSql("CURRENT_TIMESTAMP");
}
}
【问题讨论】:
标签: c# asp.net-core entity-framework-core ef-fluent-api ef-core-2.0