2011-01-06 9 views
3

Okay, das sollte wirklich einfach sein, aber ich habe mir die Haare ausgerissen. Hier ist meine POCO (die mit Maschinenteilen zu tun hat, so kann ein Teil innerhalb eines übergeordneten Teil enthalten sein):EF4 CTP5 selbst-referenzierende hierarchische Entity-Mapping

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

Wenn die Datenbanktabelle erstellt wird, werden die Spaltennamen „ID“, „Name“, und "TeilID". Wie ändere ich den Namen der letzten Spalte in "ParentPartID"?

Antwort

2

Im Grunde wollen Sie den Fremdschlüssel in einer Unabhängige Vereinigung umbenennen und dies ist die fließend API-Code, der es tun wird:

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

jedoch aufgrund eines Fehlers in CTP5, dieser Code Wurf als Ausnahme in Selbstreferenzierende Assoziationen (das ist Ihre Zuordnungstyp). Die Abhilfe wäre Ihr Verband zu einemForeign Key Verband wie folgt zu ändern:

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

.. und wegen eines anderen Fehlers in CTP5, wird dieses Attribut ignoriert werden, zusammen mit dem ParentPart Eigenschaftsnamen ;-) – RedGlyph