Ef code first 从从属到主体的导航属性

Ef code first 从从属到主体的导航属性,ef-code-first,foreign-keys,entity-framework-6,entity-relationship,Ef Code First,Foreign Keys,Entity Framework 6,Entity Relationship,我有两个实体 public class Person { public virtual int ID { get; set; } public virtual string Name { get; set; } public virtual Employee Employee { get; set; } } public class Employee { public virtual int ID { get; set; } public virtual

我有两个实体

public class Person
{
    public virtual int ID { get; set; }
    public virtual string Name { get; set; }
    public virtual Employee Employee { get; set; }
}

public class Employee
{
    public virtual int ID { get; set; }
    public virtual string Code { get; set; }
    public virtual int PersonId { get; set; }
    [ForeignKey("PersonId")]
    public virtual Person Person { get; set; }
}

在我的业务中,我们首先创建人员,然后通过选择人员来创建员工,而为员工选择人员时,我只想选择与员工无关的人员,我想不出如何在Person实体中配置Employee属性

如果您选择的是与特定员工无关的人员,那么您不应该拥有该人员的属性。您应该只有到相关实体的链接。试着在LINQ中这样做,它会让你找到所有与员工没有关系的人

var people = context.People.Where(x => x.Employee == null);

public class Person
{
    public virtual int ID { get; set; }
    public virtual string Name { get; set; }
    public virtual Employee Employee { get; set; }
 }

public class Employee
{
    public virtual int ID { get; set; }
    public virtual string Code { get; set; }
    public virtual int PersonId { get; set; }
    [ForeignKey("PersonId")]
    [InverseProperty("Employee")]
    public virtual Person Person { get; set; }
}
认为应该这样做,反向属性创建映射,所以只需要从一侧执行


希望这就是你想要的。

我想出了一个答案,不知道这是不是最好的

jobQuery = jobQuery.Where(jb => !Context.Employees.Any(emp => emp.JobId == jb.Id));

我还没有员工,我正在通过选择一个人来创建员工,我想排除已经分配给员工的人员,而且我不直接使用上下文,我正在处理repositoryAh,所以您想要所有没有员工的人员?如果我成功配置导航属性,这应该可以工作,但我无法,您能告诉我如何在fluent API或数据注释中实现这一点吗?