2016-07-24 6 views
1

Angenommen, Sie haben eine Tabelle mit Straßenmeilenmarkierungspunkten (Meilenmarkierungen sind Zeichen, die jede Meile auf US-Autobahnen platziert werden). Dann haben Sie eine zweite Tabelle mit Spannweiten zwischen diesen Meilensteinen. Die Span-Tabelle hat zwei int Spalten StartMileMarkerId und EndMileMarkerId die Fremdschlüssel sind, die auf MileMarker Id Spalte verweisen; Dies sind die Tabellen;EF-Code Zuerst - Zuordnung von zwei Fremdschlüsselspalten in der Kindtabelle zum selben Primärschlüssel

tblMileMarkers

[Table("tblMileMarkers")] 
    public class MileMarker 
    { 
     public MileMarker() 
     { 
      Spans = new HashSet<Span>(); 
     } 

     [Key] 
     public int Id { get; set; } 
     public string Name { get; set; } 
     public DbGeography Location { get; set; } 

     public virtual ICollection<Span> Spans { get; set; } 
    } 

tblSpans

[Table("tblSpans")] 
    public class Span 
    { 
     [Key] 
     public int Id { get; set; } 
     [Required, StringLength(100)] 
     public string Name { get; set; } 
     public int StartMileMarkerId { get; set; } 
     public int EndMileMarkerId { get; set; } 

     public virtual MileMarker MileMarker { get; set; } 
    } 

Wenn es nur ein Fremdschlüssel (StartMileMarkerId) ist, konnte ich die eine n-Beziehung in der DbContext mit Fluent Api konfiguriere, wie unten

modelBuilder.Entity<Span>().HasRequired(s => s.MileMarker) 
       .WithMany(m => m.Spans) 
       .HasForeignKey(s => s.StartMileMarkerId); 

Wie kann ich diese 2 Spalten zuordnen (StartMileMarkerId und EndMileMarkerId) zum selben Primärschlüssel?

Antwort

1

Da Sie über 2 Fremdschlüssel verfügen, benötigen Sie in MileMarker 2 Navigationseigenschaften für die Sammlung und in Span 2 Navigationsreferenzeigenschaften. Etwas wie folgt aus:

Milemarker Klasse:

public virtual ICollection<Span> StartSpans { get; set; } 
public virtual ICollection<Span> EndSpans { get; set; } 

Span Klasse:

public virtual MileMarker StartMileMarker { get; set; } 
public virtual MileMarker EndMileMarker { get; set; } 

Konfiguration:

modelBuilder.Entity<Span>() 
    .HasRequired(s => s.StartMileMarker) 
    .WithMany(m => m.StartSpans) 
    .HasForeignKey(s => s.StartMileMarkerId); 

modelBuilder.Entity<Span>() 
    .HasRequired(s => s.EndMileMarker) 
    .WithMany(m => m.EndSpans) 
    .HasForeignKey(s => s.EndMileMarkerId); 

P.S. Wenn Ihre Idee darin besteht, die Sammlung ModelMarker.Spans auf Spannen zu übertragen, wobei entweder der Start- oder der Endmarker dieser Marker ist, ist das einfach nicht möglich.

+0

Brilliant! Genau das habe ich gesucht. Vielen Dank –

Verwandte Themen