EntityTypeConfiguration

EntityTypeConfiguration

我试图使用一个公共(public)的EntityTypeConfiguration类来为我的所有实体配置主键,以便每个派生的配置类都不会重复自己。我所有的实体都实现一个公共(public)接口(interface)IEntity(表示每个实体必须具有int类型的Id属性)。

我的配置基类如下所示:

public class EntityConfiguration<TEntity> : EntityTypeConfiguration<TEntity>

    where TEntity : class , IEntity {

    public EntityConfiguration() {

        HasKey( e => e.Id );

        Property( e => e.Id ).HasDatabaseGeneratedOption( DatabaseGeneratedOption.Identity );

    }

}

然后,每个实体都有自己的特定配置类,将其扩展为如下所示:
public class CustomerConfiguration : EntityConfiguration<Customer> {

    public CustomerConfiguration() : base() {

        // Entity specific configuration here

    }

}

它可以很好地编译,但是我遇到的问题是,在运行时我遇到以下异常,当EF 4.1 RC尝试创建模型时,将引发以下异常:



如果我将CustomerConfiguration类更改为从EntityTypeConfiguration 扩展并重复主键配置,则它可以正常工作,但是我失去了共享通用配置的能力(DRY主体是动机)。
  • 我在这里做错什么了吗?
  • 是否存在另一种在实体之间共享通用配置的方法?

  • 作为引用,下面是其他涉及的类:
    public interface IEntity {
    
        int Id { get; set; }
    
    }
    
    public class Customer : IEntity {
    
        public virtual int Id { get; set; }
    
        public virtual string name { get; set; }
    
    }
    

    谢谢!

    最佳答案

    我认为您不需要经历所有这些事情。 EF 4.1 Code First在配置上使用了很多约定,通过它,实体的Id属性被配置为主键。因此,通过在您的实体上实现IEntity接口(interface),您可以使用ID作为主键来设置它们。

    这是ADO.NET团队博客的链接,该链接解释了主键约定的工作方式-Conventions for Code First

    10-08 05:08