实体框架关系问题

时间:2016-06-09 19:53:29

标签: c# entity-framework ef-code-first

我有三个班级

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对象。但是每当我尝试使用Entity Framework代码保存它时,我都会收到此错误

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

有人可以告诉我如何正确配置关系。

由于

1 个答案:

答案 0 :(得分:0)

在1:1关系中,您始终必须指明委托人和从属实体。主要实体是最独立的实体,在这种情况下SPRItem,大概是。{/ p>

接下来要决定的是关系应该是可选的还是必需的。我认为,根据实体名称判断,如果没有SPRItemDetailsSPRItem将永远不存在,因此关系为1:0..1(不是0..1:0..1)。以下是配置:

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

这创建(或要求)具有主键的SPRItemDetails表,该主键也是SPRItem的外键。