Reputation: 1003
I currently have a class called EmployeeDetails
which looks like below.
public class EmployeeDetails {
public int EmployeeDetailsId { get; set; }
public string Name { get; set; }
public string Title { get; set; }
[ForeignKey("Manager")]
public int? ManagerId { get; set; }
public virtual EmployeeDetails Manager { get; set; }
[ForeignKey("LineManager")]
public int? LineManagerId { get; set; }
public virtual EmployeeDetails LineManager { get; set; }
}
I'm trying to add Manager
and LineManager
properties which will reference objects of the same type.
When I try and add a migration I get the following error:
Unable to determine the principal end of an association between the types EmployeeDetails
and EmployeeDetails
.
The Manager property worked as expected before adding the ManagerId, LineManagerId
and LineManager properties.
How can I solve it?
Upvotes: 7
Views: 1919
Reputation: 11990
You have to specify the other side of the relationship. Like this:
public class EmployeeDetails
{
public int EmployeeDetailsId { get; set; }
public string Name { get; set; }
public string Title { get; set; }
[ForeignKey("Manager")]
public int? ManagerId { get; set; }
public virtual EmployeeDetails Manager { get; set; }
[ForeignKey("LineManager")]
public int? LineManagerId { get; set; }
public virtual EmployeeDetails LineManager { get; set; }
[ForeignKey("ManagerId")]
public virtual ICollection<EmployeeDetails> ManagedEmployees { get; set; }
[ForeignKey("LineManagerId")]
public virtual ICollection<EmployeeDetails> LineManagedEmployees { get; set; }
}
Generated Migration
CreateTable(
"dbo.EmployeeDetails",
c => new
{
EmployeeDetailsId = c.Int(nullable: false, identity: true),
Name = c.String(),
Title = c.String(),
ManagerId = c.Int(),
LineManagerId = c.Int(),
})
.PrimaryKey(t => t.EmployeeDetailsId)
.ForeignKey("dbo.EmployeeDetails", t => t.LineManagerId)
.ForeignKey("dbo.EmployeeDetails", t => t.ManagerId)
.Index(t => t.ManagerId)
.Index(t => t.LineManagerId);
Does that solve your problem?
Upvotes: 4