包含在实体框架中的问题

时间:2020-05-01 13:04:19

标签: entity-framework-core

我有Employee,Address和Organization类。下面是详细信息

public partial class Employees
{
    public Employees()
    {
        AddressDetails = new HashSet<AddressDetails>();
        OrganizationDetails = new HashSet<OrganizationDetails>();
    }

    public string Id { get; set; }
    public string FirstName { get; set; }
    public string MiddleName { get; set; }
    public string LastName { get; set; }

    public ICollection<AddressDetails> AddressDetails { get; set; }
    public ICollection<OrganizationDetails> OrganizationDetails { get; set; }
}

public partial class AddressDetails
{
    public int Id { get; set; }
    public string Address { get; set; }
    public string Type { get; set; }
    public string EmployeeId { get; set; }

    public Employees Employee { get; set; }
}

public partial class OrganizationDetails
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Location { get; set; }
    public string EmployeeId { get; set; }

    public Employees Employee { get; set; }
}

我使用了完全定义的关系,您可以看到Employee具有同时作为导航属性的AddressDetails和OrganizationDetails的集合。他们每个人都以相同的方式拥有EmployeeId和Employee。

我的问题是,当我尝试使用Include()获取Employee详细信息时,可以同时加载AddressDetails和OrganizationDetails,但是当我同时检查两个集合时,每个实体都再次加载了Employee信息,依此类推。

例如:如果我检查已加载的AddressDetails集合,则Address对象具有Employee的信息,并且该Employee再次具有AddressDetails和OrganizationDetails的集合。

请帮助我如何避免这种情况。我不想从AddressDetails和OrganizationDetails中删除Employee对象属性。无论如何,它可以与Include()一起使用。

这是我用来加载这些导航属性的查询。

列出员工= _context.Employees.Include(emp => emp.AddressDetails).Include(emp => emp.OrganizationDetails).ToList();

0 个答案:

没有答案