Nat*_*kle 3 c# entity-framework
Person是包含所有用户的用户模型.更改模型包括EngineerId和ManagerId,两者都是Person ID.为什么我收到此错误?
无法在类型ProjectName.Models.Change上确定外键的复合外键排序.在复合外键属性上使用ForeignKey数据批注时,请确保使用Column数据批注或Fluent API指定顺序.
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; }
}
Run Code Online (Sandbox Code Playgroud)
Iva*_*oev 12
您有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; }
}
Run Code Online (Sandbox Code Playgroud)