Честно говоря, я довольно озадачен вашим кодом и не могу понять, что вы пытались сделать.Я постараюсь предоставить правильный подход к вашей проблеме, основываясь на том, как вы описали свои сущности и отношения.
Ваши сущности:
public class Company
{
public int id { get; set }
public virtual ICollection<Sevice> Services { get; set; }
public virtual ICollection<Container> Containers { get; set; }
}
public class Container
{
public int id { get; set; }
public int id_company { get; set; }
public virtual Company company { get; set; }
public virtual ICollection<Sevice> Services { get; set; }
}
public class Sevice
{
public int id { get; set; }
public int? id_company { get; set; }
public int? id_container { get; set; }
public virtual Company company { get; set; }
public virtual Container container { get; set; }
}
Вы сказали, что еще не добавляете какие-либо данные в базу данных, поэтому давайте сосредоточимся на получении существующих данных.
using (Context context = new Context())
{
var company = context.Companies.ToList();
}
Если вы отключили отложенную загрузку, вам нужно включить ваши дочерние таблицы с include
.
using (Context context = new Context())
{
var company = context.Companies.Include(g => g.Services)
.Include(g => g.Containers)
.Include(g => g.Containers.Select(s => s.Services))
.ToList();
}
Если вы правильно определили отношения, объект вашей компании должен быть правильно загруженвсе объекты.
Если я совершенно неправ о чем-то, дайте мне знать, пока удачи.
Окончательное редактирование
Давайте приведем пример данных
Company { id: 1 }
Container { id: 1, id_company: 1 }
Service { id: 1, id_company: 1, id_container: 1 }
Service { id: 2, id_company: 1, id_container: null }
Затем с помощью некоторого метода get, подобного следующему:
using (Context context = new Context())
{
var company = context.Companies.Where(x => x.id == someCompanyId)
.Include(g => g.Services)
.Include(g => g.Containers)
.Include(g => g.Containers.Select(s => s.Services))
.ToList();
}
В результате вы получите объект, который выглядит следующим образом:
Company
services: (1, 2)
containers: (1)
services: (1)
Где Company - это объект, службы и контейнеры.являются коллекциями объектов.Числа в скобках - это идентификаторы объектов enitity внутри коллекций.Вам не нужно добавлять что-либо, как в коде, который вы опубликовали.