我有一个多对一的情况,员工可以为许多客户服务,每个客户由1名员工提供服务。在Customer类中,我使用ForeignKey属性将SupportRep映射到EmployeeId,它给了我一个错误。
public class Customer
{
[Key]
public int CustomerId { get; set; }
...
public int? SupportRepId { get; set; }
[ForeignKey("EmployeeId")]
public virtual Employee SupportRep { get; set; }
}
public class Employee
{
[Key]
public int EmployeeId { get; set; }
...
[ForeignKey("SupportRepId")]
public virtual ICollection<Customer> Customers { get; set; }
}
我得到的错误是:
错误:属性&#39; SupportRep&#39;上的ForeignKeyAttribute在类型&#39; SqlLiteChinook。 客户&#39;无效。外键名称&#39; EmployeeId&#39;在d上没有找到 依赖类型&#39; SqlLiteChinook.Customer&#39;。 Name值应为逗号分隔符 外国关键财产名称列表。
但是,如果我在Customer类中将EmployeeId更改为SupportRepId,则可以正常工作。
Customer类中的外键是否指向Employee类的EmployeeId?
请赐教。谢谢。
答案 0 :(得分:1)
你把事情搞混了。 [ForeignKey("EmployeeId")]
类中的Customer
必须说明该类的哪个属性是Employee
的外键。该属性不会在Employee
类中查找外键。
你的第二个错误是在ICollection<Customer>
上声明一个外键。由于您拥有一对多关系,因此您的收藏集不能指向一个客户,它与多个客户有关系。因此,您的客户需要向员工提供外键(每个客户都要指向一名员工),但员工不能包含客户的外键。
public class Customer
{
[Key]
public int CustomerId { get; set; }
...
public int? SupportRepId { get; set; }
[ForeignKey("SupportRepId")]
public virtual Employee SupportRep { get; set; }
}
public class Employee
{
[Key]
public int EmployeeId { get; set; }
...
public virtual ICollection<Customer> Customers { get; set; }
}
答案 1 :(得分:0)
试试这个
public class Customer
{
[Key]
public int CustomerId { get; set; }
...
public int? SupportRepId { get; set; }
[ForeignKey("SupportRepId")]
public virtual Employee SupportRep { get; set; }
}
public class Employee
{
[Key]
public int EmployeeId { get; set; }
...
public virtual ICollection<Customer> Customers { get; set; }
}