Entity Framework 4.1 RC: problème de l'héritage du premier EntityTypeConfiguration du code

Je suis en train d'utiliser un commun EntityTypeConfiguration classe pour configurer la clé primaire pour tous mes entités, de sorte que chaque configuration dérivée de la classe ne se répète pas. Toutes mes entités de mettre en œuvre une interface commune IEntity (qui dit que chaque entité doit avoir une propriété Id de type int).

Ma configuration de la classe de base ressemble à ceci:

public class EntityConfiguration<TEntity> : EntityTypeConfiguration<TEntity>

    where TEntity : class , IEntity {

    public EntityConfiguration() {

        HasKey( e => e.Id );

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

    }

}

Alors chaque entité a sa propre configuration spécifique de la classe de l'extension de celui-ci comme ceci:

public class CustomerConfiguration : EntityConfiguration<Customer> {

    public CustomerConfiguration() : base() {

        //Entity specific configuration here

    }

}

Il compile bien, mais le problème que j'ai, c'est que lors de l'exécution j'obtiens l'Exception suivante soulevées lors de l'EF 4.1 RC essaie de créer le modèle:

Système.InvalidOperationException a été
non gérée Message=l'élément clé de La
"Id" n'est pas une propriété déclarée sur
type de "Client". Vérifier qu'il a
pas été explicitement exclus de la
modèle et qu'il est valide primitive
de la propriété. Source=EntityFramework

Si je change la configuration client de la classe d'étendre à partir de EntityTypeConfiguration<Client>, et répétez la clé primaire de configuration puis il fonctionne très bien, mais je perds la possibilité de partager des communes de configuration (SEC principale est la motivation).

  • Je fais quelque chose de mal ici?
  • Est-il une autre façon de partager une configuration commune entre les entités?

Pour référence, voici les autres classes concernées:

public interface IEntity {

    int Id { get; set; }

}

public class Customer : IEntity {

    public virtual int Id { get; set; }

    public virtual string name { get; set; }

}

Merci!

source d'informationauteur Jamie | 2011-04-08