gpt4 book ai didi

c# - EF Core 2 中的通用实体配置类

转载 作者:行者123 更新时间:2023-11-30 15:55:49 24 4
gpt4 key购买 nike

我正在尝试为我的实体创建一个通用配置类,但我被卡住了。

我有一个名为 EntityBase 的抽象类:

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 的类,在这些类中,我必须使用相同的代码在每个类中配置 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>类,您可以使用 virtual void Configure 创建一个基础通用配置类方法并让您的具体配置类继承自它,覆盖 Configure方法和调用 base.Configure在进行具体调整之前。

但是假设您希望能够准确调用 builder.ConfigureBase() .要允许该语法,您只需将公共(public)代码移动到自定义通用扩展方法,如下所示:

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
}

关于c# - EF Core 2 中的通用实体配置类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47930582/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com