2016-06-09 24 views
1

Ich habe drei KlassenEntity Framework Beziehungen Fragen

public class SPR 
{ 
    public int ID { get; set; }  
    public string SubmittedBy { get; set; } 
    public virtual ICollection<SPRItem> AllItems { get; set; } 


} 
public class SPRItem 
{ 
    [Key] 
    public int ID { get; set; } 

    public string manufacturer { get; set; } 

    [ForeignKey("SPRItemDetails")] 
    public virtual SPRItemDetails ItemDetails { get; set; }  

    public string requestedMinimumQuantity { get; set; } 

    public virtual SPR SPR { get; set; } 

} 


public class SPRItemDetails 
    { 
     public int ID { get; set; } 

     public string ItemNumber { get; set; } 

     public virtual SPRItem SPRItem { get; set; } 


    } 

So ist die SPR-Klasse hat eine Sammlung von SPRItem und welches die ItemDetails widersprechen.

Ich habe eine Web-API-Methode, die die Daten auf das SPR-Objekt abbildet und die SPRItem-Liste und das ItemDetails-Objekt ausfüllt. Aber immer, wenn ich versuche, es zu speichern Code Entity Framework ersten bin ich diesen Fehler

{"Message":"An error has occurred.","ExceptionMessage":"Unable to determine the principal end of an association between the types 'SharePoint.MultiSPR.Service.Models.SPRItemDetails' and 'SharePoint.MultiSPR.Service.Models.SPRItem'. The principal end of this association must be explicitly configured using either the relationship fluent API or data annotations. 

Das ist mein Context

public System.Data.Entity.DbSet<SharePoint.MultiSPR.Service.Models.SPR> SPRs { get; set; } 

    public System.Data.Entity.DbSet<SharePoint.MultiSPR.Service.Models.SPRItem> SPRItem { get; set; } 

    public System.Data.Entity.DbSet<SharePoint.MultiSPR.Service.Models.SPRItemDetails> SPRItemDetails { get; set; } 

Kann mir bitte jemand sagen, wie die Beziehungen richtig zu konfigurieren.

Dank

Antwort

0

In einer 1: 1-Beziehung haben Sie immer die Haupt- und die abhängige Einheit anzuzeigen. Die Haupteinheit ist diejenige, die am meisten unabhängig von der anderen ist, in diesem Fall vermutlich SPRItem.

Als nächstes muss entschieden werden, ob die Beziehung optional oder erforderlich sein soll. Ich denke, nach den Entitätsnamen zu urteilen, wird ein SPRItemDetails niemals ohne ein SPRItem existieren, so dass die Beziehung 1:0..1 (nicht 0..1:0..1) ist. Hier ist, wie das konfigurieren:

modelBuilder.Entity<SPRItem>() 
      .HasOptional(si => si.ItemDetails) 
      .WithRequired(id => id.SPRItem); 

Dies schafft (oder erfordert) eine SPRItemDetails Tabelle einen Primärschlüssel hat, die ist auch ein Fremdschlüssel zu SPRItem.

Verwandte Themen