正在尝试在实体框架中的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来实现它。
我真的很感谢你的帮助。
我最美好的祝愿。
由于您已经有了执行实际工作的代码,因此我只在此处包含与表达式树相关的部分:
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(任何语言改进)的目标都是简化复杂的东西,而不是将简单的东西复杂化。