Ich habe diese Art von Entität
Unternehmen mit 'n' Service und Unternehmen mit 'n' Container mit 'n' Service
Wenn ich einen Dienst mit Container zur Firma hinzufüge ... Ich habe 1 Service und 1 Behälter mit 1 Service. Wenn ich einen anderen Dienst, ohne Container (und UUID), der gleichen Firma hinzufüge ... Ich habe 2 Dienste und 1 Container mit 2 Diensten! :(
Warum das?
Schnelles Schema meiner Entitätskonfiguration.
Container:
HasRequired(e => e.company)
.WithMany(e => e.container)
.HasForeignKey(e => e.id_company)
.WillCascadeOnDelete(false);
Bedienung:
HasOptional(e => e.container)
.WithMany(e => e.services)
.HasForeignKey(e => e.uuid_container)
.WillCascadeOnDelete(false);
Code zum Abrufen von Daten aus der Datenbank
if (!result.Any(x => x.id == cfi.id_company))
{
result.Add(cfi.Company);
}
else
{
result.Where(x => x.id == cfi.id_company).FirstOrDefault().result
.Where(x => x.id == cfi.id_company).FirstOrDefault();
a.services.Add(cfi.Company.services.FirstOrDefault());
}
cfi ist eine Liste von Diensten, zu denen Unternehmen gehören, die Container und Dienste haben
Um fair zu sein, bin ich ziemlich verwirrt von Ihrem Code und kann nicht herausfinden, was Sie tun wollten. Ich werde versuchen, den richtigen Ansatz für Ihr Problem zu bieten, basierend darauf, wie Sie Ihre Entitäten und Beziehungen beschrieben haben.
Ihre Entitäten:
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; }
}
Sie haben gesagt, dass Sie der Datenbank noch keine Daten hinzufügen. Konzentrieren Sie sich also darauf, vorhandene Daten abzurufen.
using (Context context = new Context())
{
var company = context.Companies.ToList();
}
Wenn Sie das verzögerte Laden deaktiviert haben, müssen Sie Ihre untergeordneten Tabellen mit 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();
}
Wenn Sie Beziehungen richtig definiert haben, sollte Ihr Firmenobjekt alle Objekte korrekt geladen haben.
Wenn ich falsch liege, lass es mich wissen, bisher viel Glück.
Letzte Änderung
Lets haben Beispieldaten
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 }
Dann mit einigen bekommen Methode wie folgt:
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();
}
Sie werden mit einem Objekt enden, das wie folgt aussieht:
Company
services: (1, 2)
containers: (1)
services: (1)
Wo Firma Objekt ist, sind Dienste und Container Sammlungen von Objekten. Zahlen in Klammern sind IDs von Entitätsobjekten in Sammlungen. Sie müssen nichts hinzufügen, wie in Code, den Sie gepostet haben.