正在尝试在实体框架中的EntityTypeConfiguration上创建HasUnique(泛型挑战)

本文关键字:HasUnique 创建 挑战 泛型 实体 框架 EntityTypeConfiguration | 更新日期: 2023-09-27 18:25:15

提前感谢

我继承EntityTypeConfiguration是为了创建HasUnique方法。

我的目标是在使用泛型时尊重实体框架的模式。因此,我确实想使用泛型和Lambda表达式来完成它。

但是,我不是泛型专家,也不是lambda。

我在研究EntityTypeConfiguration类,看到了HasMany方法,以及如何使用泛型定义它并接收表达式>>。

所以,最后,我想要的是这样的东西:

HasUnique(myType => myType.ForeignKey).WithColumn(myTypeAgain => myTypeAgain.VarcharColumn);

到目前为止,我最终做的是:

HasUnique("column1").WithColumn("column2").WithColumn("column3");

但是,正如我所说,我希望使用泛型和lambda来实现它。

我真的很感谢你的帮助。

我最美好的祝愿。

正在尝试在实体框架中的EntityTypeConfiguration上创建HasUnique(泛型挑战)

由于您已经有了执行实际工作的代码,因此我只在此处包含与表达式树相关的部分:

public class ExtendedEntityTypeConfiguration<TEntity> : EntityTypeConfiguration<TEntity>
{
    public UniqueConstraintConfiguration<TEntity> HasUnique(string propertyName)
    {
        var result = new UniqueConstraintConfiguration<TEntity>();
        result.WithColumn(propertyName);
        return result;
    }
    public UniqueConstraintConfiguration<TEntity> HasUnique<TProperty>(Expression<Func<TEntity, TProperty>> property)
    {
        var result = new UniqueConstraintConfiguration<TEntity>();
        result.WithColumn(property);
        return result;
    }
}
public abstract class UniqueConstraintConfiguration
{
    public UniqueConstraintConfiguration WithColumn(string propertyName)
    {
        // TODO: add code here
        return this;
    }
}
public class UniqueConstraintConfiguration<TEntity> : UniqueConstraintConfiguration
{
    public new UniqueConstraintConfiguration<TEntity> WithColumn(string propertyName)
    {
        base.WithColumn(propertyName);
        return this;
    }
    public UniqueConstraintConfiguration<TEntity> WithColumn<TProperty>(Expression<Func<TEntity, TProperty>> property)
    {
        base.WithColumn(((MemberExpression)property.Body).Member.Name);
        return this;
    }
}

我的天啊@Marco,当你的解决方案更干净/更简单时,你为什么要经历这一切?牢记业务/日程安排/未来维护/资源库技能,并保持简单!Lambdas(任何语言改进)的目标都是简化复杂的东西,而不是将简单的东西复杂化。