EF Core 2 中的通用实体配置 class
Generic entity configuration class in EF Core 2
我正在尝试为我的实体创建一个通用配置 class,但我卡住了。
我有一个名为 EntityBase 的摘要 class:
public abstract class EntityBase
{
public int Id { get; set; }
public int TenantId { get; set; }
public DateTime CreatedOn { get; set; }
public DateTime UpdatedOn { get; set; }
}
以及许多其他继承自 EntityBase 的 classes,我必须在其中使用相同的代码配置每个中的 DateTime 属性。这样:
void EntityTypeConfiguration<MyEntity>.Configure(EntityTypeBuilder<MyEntity> builder)
{
builder.HasIndex(e => e.TenantId);
builder.Property(e => e.CreatedOn)
.ValueGeneratedOnAdd()
.HasDefaultValueSql("GETDATE()");
// Other specific configurations here
}
我希望能够像这样调用:builder.ConfigureBase() 并避免代码重复。有什么想法吗?
您可以通过多种方式实现目标。例如,由于您似乎正在使用 IEntityTypeConfiguration<TEntity>
classes,您可以使用 virtual void Configure
方法创建基本通用配置 class 并让您的具体配置 class es继承自它,覆盖Configure
方法并在进行特定调整之前调用base.Configure
。
但是假设您希望能够准确调用 builder.ConfigureBase()
。要允许该语法,您只需将公共代码移动到自定义通用扩展方法,如下所示:
public static class EntityBaseConfiguration
{
public static void ConfigureBase<TEntity>(this EntityTypeBuilder<TEntity> builder)
where TEntity : EntityBase
{
builder.HasIndex(e => e.TenantId);
builder.Property(e => e.CreatedOn)
.ValueGeneratedOnAdd()
.HasDefaultValueSql("GETDATE()");
}
}
使用示例:
void IEntityTypeConfiguration<MyEntity>.Configure(EntityTypeBuilder<MyEntity> builder)
{
builder.ConfigureBase();
// Other specific configurations here
}
我正在尝试为我的实体创建一个通用配置 class,但我卡住了。
我有一个名为 EntityBase 的摘要 class:
public abstract class EntityBase
{
public int Id { get; set; }
public int TenantId { get; set; }
public DateTime CreatedOn { get; set; }
public DateTime UpdatedOn { get; set; }
}
以及许多其他继承自 EntityBase 的 classes,我必须在其中使用相同的代码配置每个中的 DateTime 属性。这样:
void EntityTypeConfiguration<MyEntity>.Configure(EntityTypeBuilder<MyEntity> builder)
{
builder.HasIndex(e => e.TenantId);
builder.Property(e => e.CreatedOn)
.ValueGeneratedOnAdd()
.HasDefaultValueSql("GETDATE()");
// Other specific configurations here
}
我希望能够像这样调用:builder.ConfigureBase() 并避免代码重复。有什么想法吗?
您可以通过多种方式实现目标。例如,由于您似乎正在使用 IEntityTypeConfiguration<TEntity>
classes,您可以使用 virtual void Configure
方法创建基本通用配置 class 并让您的具体配置 class es继承自它,覆盖Configure
方法并在进行特定调整之前调用base.Configure
。
但是假设您希望能够准确调用 builder.ConfigureBase()
。要允许该语法,您只需将公共代码移动到自定义通用扩展方法,如下所示:
public static class EntityBaseConfiguration
{
public static void ConfigureBase<TEntity>(this EntityTypeBuilder<TEntity> builder)
where TEntity : EntityBase
{
builder.HasIndex(e => e.TenantId);
builder.Property(e => e.CreatedOn)
.ValueGeneratedOnAdd()
.HasDefaultValueSql("GETDATE()");
}
}
使用示例:
void IEntityTypeConfiguration<MyEntity>.Configure(EntityTypeBuilder<MyEntity> builder)
{
builder.ConfigureBase();
// Other specific configurations here
}