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
Vous devez vous connecter pour publier un commentaire.
Je ne pense pas que vous avez besoin pour passer à travers tout cela. 4.1 EF Code utilise d'Abord un lot de la convention over configuration par ce biais, l'Id de la propriété d'une entité est configuré en tant que clé primaire. Par la mise en œuvre de la IEntity interface sur votre entités vous êtes en leur donnant de l'Id comme clé primaire.
Voici un lien vers le ADO.NET l'Équipe de Blog qui explique comment la clé primaire de la convention de travaux - Conventions pour le Premier Code
Il semble que ces configurations a un problème avec l'interface. Il fonctionne si vous modifiez
IEntity
àEntityBase
:Vous pouvez simplement créer une méthode statique d'une classe et de passer de l'entité. Par exemple:
J'ai des problème similaire avec EF5.0 quand j'ai le générique de la classe abstraite avec l'Id de propriété et la mise en œuvre pour les membres abstraits et de l'autonomie des propriétés définies.
ressembler à entity framework code first est la recherche que pour le cartographié des propriétés de la classe.
j'ai essayé d'utiliser le réflecteur semble que je suis de droite, mais n'est pas sûr à 100%.
Et, heureusement, ont trouvé la solution pour cela:
donc dans mon cas: à la carte également des propriétés de la classe de base, je dois ajouter une ligne de code m.MapInheritedProperties()...