2010-10-12 8 views
1

Dans certains cas, nous pouvons avoir des références PK/FK dupliquées, donc l'entité A et l'entité B sont dans une relation PK/FK, mais 3 fois. Donc l'entité A aurait 3 collections FK et l'entité B aurait 3 références d'entité. Comment cela fonctionne-t-il avec le template code-first? Suivez-vous la convention de dénomination des premières approches du modèle/base de données Entity Framework (EntityA, EntityA1, etc.), et savez-vous comment accrocher ces relations, ou y at-il une étape supplémentaire, ou quoi?Code Premier CTP: plusieurs PK ou FK

Merci.

Répondre

2

Si vous deviez définir vos classes comme celui-ci

public class EntityA 
{ 
    public int EntityAId { get; set; } 
    public virtual EntityB EntityB1 { get; set; } 
    public virtual EntityB EntityB2 { get; set; } 
    public virtual EntityB EntityB3 { get; set; } 
} 

public class EntityB 
{ 
    public int EntityBId { get; set; } 
    public string Name { get; set; } 
} 

code EF Première créeraient deux tables (EntityAs, EntityBs). Par convection, la table EntityAs aurait une clé primaire d'EntityAId et trois clés étrangères reliant EntityB appelées (EntityB1_EntityBId, EntityB2_EntityBId, EntityB3_EntityBId).

Vous pouvez toutefois remplacer cette convection en ajoutant des propriétés pour les clés étrangères et en ajoutant des balises RelatedTo dans les propriétés de navigation.

Par exemple:

public class EntityA 
{ 
    public int EntityAId { get; set; } 
    public int MySpecialFkName { get; set; } 
    [RelatedTo(ForeignKey = "MySpecialFkName")] 
    public EntityB EntityB1 { get; set; } 
} 

Si vous ne voulez pas que les méta-données associésà dans votre classe POCO, vous pourriez plutôt définir la relation dans la méthode OnModelCreating.

modelBuilder.Entity<EntityA>().HasRequired(p => p.EntityB1) 
      .HasConstraint((fk, pk) => fk.MySpecialFkName == pk.EntityBId); 
Questions connexes