2011-12-05 5 views
2

J'ai un problème avec le code EF 4.2 D'abord sur une base de données SQL existante.Code EF premier, clé étrangère composite avec partie statique

Je dispose de plusieurs entités comme l'entreprise, l'utilisateur, etc.

Informations communes sont stockées dans une table seprate appelée Entité clé primaire [entityID, EntityTypeId].

  • entityID correspond à CorporateId, UserId, etc.
  • EntityTypeId est un identifiant statique utilisé comme discrimiator entre les entités

J'ai la conception de classe suivante. Comme vous pouvez le voir, EntityTypeId est une propriété statique et il n'y a pas de colonne correspondante dans la table utilisateur.

Carte:

public UserMap() 
{ 
     // Primary Key 
     this.HasKey(t => t.Id); 

     // Table & Column Mappings 
     this.ToTable("User"); 
     this.Property(t => t.Id).HasColumnName("UserId"); 

     // Relationships 
     this.HasRequired(t => t.Entity) 
      .WithMany() 
      .HasForeignKey(p => new { p.Id, p.EntityTypeId }); //<-- Problem 
    } 


public EntityMap() 
{ 
     // Primary Key 
     this.HasKey(t => new { t.Id, t.EntityTypeId }); 

     // Table & Column Mappings 
     this.ToTable("Entity"); 
     this.Property(t => t.Id).HasColumnName("EntityId"); 
     this.Property(t => t.EntityTypeId).HasColumnName("EntityTypeId"); 
} 

Quand je lance ce code, je reçois l'erreur: System.Data.SqlClient.SqlException: Nom de colonne non valide 'EntityTypeId'. Je suppose que c'est parce que la colonne EntityTypeId n'existe pas dans la table User. Y at-il un moyen de contourner ce problème, car je ne peux pas créer cette colonne sur la table?!

Merci beaucoup

Répondre

0

C'est même pas valide FK dans la base de données et EF utilisent exactement les mêmes règles que base de données pour définir les relations comme une base de données afin que vous ne serez pas en mesure de cartographier cette relation. Cela ressemble plus à une combinaison d'héritage TPH et TPT mais EF n'aime pas cette combinaison et ne peut pas la mapper (ou du moins je n'ai jamais pu la faire fonctionner complètement). Par exemple, pour commencer avec TPH, EF n'autorise pas le discriminateur dans la clé primaire.

Questions connexes