提前感谢
为了创建一个HasUnique方法,我继承了EntityTypeConfiguration。
我的目标是在使用泛型时尊重实体框架的模式。所以我确实想同时使用泛型和Lambda表达式来实现它。
但是,我不是泛型的专家,也不是lambda的专家。
我正在研究EntityTypeConfiguration类,我看到了HasMany方法,以及它是如何使用泛型定义的,并接收了一个Expression>>。
所以,最后,我想要的是这样的:
HasUnique(myType => myType.ForeignKey).WithColumn(myTypeAgain => myTypeAgain.VarcharColumn);到目前为止,我最终要做的是:
HasUnique("column1").WithColumn("column2").WithColumn("column3");但是,正如我所说的,我希望使用泛型和lambdas来完成它。
我真的很感谢你的帮助。
致以我最美好的祝福。
发布于 2012-02-21 01:42:55
因为你已经有了完成实际工作的代码,所以我在这里只包含与表达式树相关的部分:
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;
}
}发布于 2012-03-09 01:19:01
我的天,@Marco,当你的解决方案更干净/更简单的时候,你为什么要让自己经历所有这些呢?牢记业务/计划/未来维护/资源池技能-并保持简单!Lambdas (任何语言改进)的目的是简化复杂的东西,而不是使简单的东西复杂化。
https://stackoverflow.com/questions/9363967
复制相似问题