c# – 无法确定外键的复合外键排序
发布时间:2020-12-15 23:48:45 所属栏目:百科 来源:网络整理
导读:Person是包含所有用户的用户模型.更改模型包括EngineerId和ManagerId,两者都是Person ID.为什么我收到此错误? Unable to determine a composite foreign key ordering for foreign key on type ProjectName.Models.Change. When using the ForeignKey data
Person是包含所有用户的用户模型.更改模型包括EngineerId和ManagerId,两者都是Person ID.为什么我收到此错误?
public class Change { [Key] public int ChangeId { get; set; } [Required(ErrorMessage = "Change description is required.")] [Display(Name = "Change Description")] [DataType(DataType.MultilineText)] public string ChangeDescription { get; set; } [Required(ErrorMessage = "Change date is required.")] [Display(Name = "Date of Change")] [DataType(DataType.Date)] public DateTime ChangeDate { get; set; } [Required(ErrorMessage = "Time is required.")] [Display(Name = "Time of Change")] [DataType(DataType.Time)] public DateTime ChangeTime { get; set; } [Required(ErrorMessage = "Engineer name is required.")] [Display(Name = "Engineer")] [ForeignKey("person")] public int EngineerId { get; set; } [Required(ErrorMessage = "Status is required.")] [Display(Name = "Status")] public int StatusId { get; set; } [Required(ErrorMessage = "Manager is required.")] [Display(Name = "Manager")] [ForeignKey("person")] public int ManagerId { get; set; } [Required(ErrorMessage = "System is required.")] [Display(Name = "System")] public int SystemDetailId { get; set; } public virtual Person person { get; set; } public virtual Status status { get; set; } public virtual SystemDetail systemdetail { get; set; } } 解决方法
您有2个外键属性(EngineerId和ManagerId),它们(通过ForeignKey属性)与同一个导航属性(person)相关联.这种方式EF认为它们形成一个复合键,因此你得到的例外.
由于(如果我理解正确)你的意图是有两个关系,你需要将每个外键与一个单独的导航属性相关联.以下是您需要更改的重要部分: public class Change { // ... [Required(ErrorMessage = "Engineer name is required.")] [Display(Name = "Engineer")] [ForeignKey("Engineer")] public int EngineerId { get; set; } [Required(ErrorMessage = "Manager is required.")] [Display(Name = "Manager")] [ForeignKey("Manager")] public int ManagerId { get; set; } // instead of person property: public virtual Person Engineer { get; set; } public virtual Person Manager { get; set; } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |