2011-01-06 3 views
3

D'accord, cela devrait être vraiment facile, mais je me suis arraché les cheveux. Voici mon POCO (qui doit faire avec des pièces de machine, une partie peut être contenue dans une partie parent):EF4 CTP5 auto-référenciation entité hiérarchique cartographie

public class Part 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public Part ParentPart { get; set; } 
} 

Lorsque la table de base de données est créée, les noms de colonnes sont « ID », « Nom », et "PartID". Comment changer le nom de cette dernière colonne en "ParentPartID"?

Répondre

2

Fondamentalement, vous souhaitez renommer la clé étrangère dans une association indépendante ce qui est le code API couramment qui va le faire:

protected override void OnModelCreating(ModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Part>() 
       .HasOptional(p => p.ParentPart) 
       .WithMany() 
       .IsIndependent() 
       .Map(m => m.MapKey(p => p.ID, "ParentPartID")); 
} 

Toutefois, en raison d'un bogue dans CTP5, ce code jet comme exception dans les associations auto-référencées (qui est votre type d'association). La solution serait de changer votre association à une association de clé étrangère comme suit:

public class Part 
{ 
    public int ID { get; set; } 
    public string Name { get; set; }     
    public int ParentPartID { get; set; } 

    [ForeignKey("ParentPartID")] 
    public Part ParentPart { get; set; } 
} 
+0

.. et en raison d'un autre bogue dans CTP5, cet attribut sera ignoré, ainsi que le nom de la propriété ParentPart ;-) – RedGlyph

Questions connexes