2016-06-09 207 views
1

我有三個類實體框架的關係問題

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; } 


    } 

所以SPR類有SPRItem的集合,它具有ItemDetails對象。

我有一個Web API方法,它將數據映射到SPR對象並填充SPRItem列表和ItemDetails對象。但每當我試圖首先使用實體​​框架代碼來保存它,我得到這個錯誤

{"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. 

這是我的上下文

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; } 

有人可以告訴我如何正確配置關係。

謝謝

回答

0

在1:1的關係中,你總是必須指明主體和從屬實體。主要實體是最相互獨立的實體,在這種情況下,大概是SPRItem

要決定的下一件事是關係是否應該是可選的或必需的。我認爲,從實體名稱來看,如果沒有SPRItemSPRItemDetails將永遠不存在,所以關係是1:0..1(而不是0..1:0..1)。下面是如何配置:

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

這將創建(或需要),具有一個主鍵,這也是一個外鍵SPRItemSPRItemDetails表。