我有三个班级
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; }
有人可以告诉我如何正确配置关系。
由于
答案 0 :(得分:0)
在1:1关系中,您始终必须指明委托人和从属实体。主要实体是最独立的实体,在这种情况下SPRItem
,大概是。{/ p>
接下来要决定的是关系应该是可选的还是必需的。我认为,根据实体名称判断,如果没有SPRItemDetails
,SPRItem
将永远不存在,因此关系为1:0..1
(不是0..1:0..1
)。以下是配置:
modelBuilder.Entity<SPRItem>()
.HasOptional(si => si.ItemDetails)
.WithRequired(id => id.SPRItem);
这创建(或要求)具有主键的SPRItemDetails
表,该主键也是SPRItem
的外键。