首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试在实体框架中的EntityTypeConfiguration上创建HasUnique (泛型挑战)

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

Stack Overflow用户
提问于 2012-02-20 23:47:45
回答 2查看 1.5K关注 0票数 0

提前感谢

为了创建一个HasUnique方法,我继承了EntityTypeConfiguration。

我的目标是在使用泛型时尊重实体框架的模式。所以我确实想同时使用泛型和Lambda表达式来实现它。

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

我正在研究EntityTypeConfiguration类,我看到了HasMany方法,以及它是如何使用泛型定义的,并接收了一个Expression>>。

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

代码语言:javascript
复制
HasUnique(myType => myType.ForeignKey).WithColumn(myTypeAgain => myTypeAgain.VarcharColumn);

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

代码语言:javascript
复制
HasUnique("column1").WithColumn("column2").WithColumn("column3");

但是,正如我所说的,我希望使用泛型和lambdas来完成它。

我真的很感谢你的帮助。

致以我最美好的祝福。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-21 01:42:55

因为你已经有了完成实际工作的代码,所以我在这里只包含与表达式树相关的部分:

代码语言:javascript
复制
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;
    }
}
票数 1
EN

Stack Overflow用户

发布于 2012-03-09 01:19:01

我的天,@Marco,当你的解决方案更干净/更简单的时候,你为什么要让自己经历所有这些呢?牢记业务/计划/未来维护/资源池技能-并保持简单!Lambdas (任何语言改进)的目的是简化复杂的东西,而不是使简单的东西复杂化。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9363967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档