1

Ich arbeite auf einem asp.net mvc-5 mit Entity-Framework 6. jetzt verwende ich keine Art auf generische Repositories, wie die hier genannten: -Was kann/kann nicht in einem generischen Repository getan werden

Link-1

&

Link-2

nun das generische Repository gibt Ihnen ein Gefühl, dass Sie alles in allgemeiner Weise tun können .. aber in diesen zwei Links scheint, was generilzed werden kann sind die grundlegenden Operationen für erhalten, hinzufügen, löschen & ändern, die von Defualt innerhalb Entity Framework bereitgestellt werden. Also kann jemand auf thes Frage regreging mit generischen Repositories mit EF-6 & MVC-5: -

1.Ist es wirklich ein guter Ansatz der Verwendung von Generic Repo? Wie es scheint generische Repo wird nur, was EF bereits zur Verfügung stellen !!

2.Let sagen, ich habe zwei Eltern-/Kind (DataCenter-/Zone) Objekte: -

public class DataCenter 
    { 

     public int ID { get; set; } 
     public string Name { get; set; } 
     public byte[] timestamp { get; set; } 


     public virtual ICollection<Zone> Zones { get; set; } 
    } 

public class Zone 
    { 


     public int ZoneID { get; set; } 
     public string Name { get; set; } 
     public int DataCenterID { get; set; } 

     public virtual DataCenter DataCenter { get; set; } 

    } 

jetzt den Generic-Repository ich bekommen kann, Hinzufügen, Bearbeiten, Löschen Sie diese 2 Objekte mit dem gleichen generic Repomethoden. aber wir sagen, dass ich alle Zonen abrufen möchten zu einem bestimmten Datacenter wie folgt bezogen werden: -

var results = entity.DataCenters.SingleOrDefault(a => a.ID == id).Zones.Where(a => a.Name.Contains("1")); 

kann so die generische Repository Unterstützung eine solche Abfrage, in einer Weise, die ich kann die Abfrage mit einem anderen Objekt wiederverwenden Typen (außer Datacenter & Zonen). Zum Beispiel, um eine generische Abfrage zu haben: - um ein Eltern-Objekt nach ID zu bekommen und für sein Kind, um die Kinder zu bekommen, deren Namen das Wort "1" enthalten? und was passiert, wenn die Eltern mehrere Kindertypen haben !! Wird das generische Repository nicht-generische Abfragen und Operationen unterstützen?

+0

A) ja, weil Sie EF mit ServiceStack ersetzen konnten, wenn Sie wollten; es ist immer gut, wenn möglich zu entkoppeln. B) Ja, im Prinzip könnten Ihre Repository-Implementierungen die Handarbeit für Sie übernehmen und die referenzierten Objekte aus anderen Tabellen abrufen. ServiceStack.Ormlite kann es tun. https://github.com/ServiceStack/ServiceStack.Ormlite#reference-support-poco-style –

+0

@MeirionHughes jetzt verwende ich nicht ServiceStack ich verwende nur EF-6 so wird EF Unterstützung meine obige Abfrage, die eine Abfrage verwenden Eltern/Kind Objekte? –

Antwort

1

Ich ging durch die gleiche Frage ... Ich habe zuerst ein bestimmtes Repository, dann wechselte ich zu einem generischen. Aber ich musste so viele spezifische Abfragen programmieren, dass ich mich entschloss, sie für nicht-generische Repositories zu ändern, ToList zurückzusenden (ich wollte nicht IQueryable) und Unit of Work-Muster zu verwenden. Jetzt denke ich, ich bin glücklich mit der Art, wie die Dinge sind.

Edit: Abfrage das Kind es Eigentum ist auch die Eltern zurückzubringen (ist das, was Sie wollen?):

return await _context.Entity.Include(e => e.Parent) 
          .Where(e => e.SomeProp == someParam) 
          .ToListAsync(); 

Oder Querychild, eine Eigenschaft in der Eltern mit, womit sich die Eltern zurück :

return await _context.Entity.Include(e => e.Parent) 
           .Where(e => e.Parent.SomeProp == someParam) 
           .ToListAsync(); 
+0

Sie meinen also, Sie haben mehrere spezialisierte Repositories, die zusammen mit Unit oder Work verwaltet werden? Das ist der gleiche Ansatz, dem ich folge.aber Sie haben meine Frage nicht beantwortet, wenn ich eine allgemeine Abfrage definieren kann, wie zum Beispiel: - um ein Elternobjekt nach ID zu bekommen und damit das Kind die Namen bekommt, die das Wort "1" enthalten –

+0

Nur eine Beobachtung: wie Sie Wenn Sie den Ansatz der Arbeitseinheit verwenden, können Sie das Parent über UnitOfWork abfragen, aber ich habe meine Antwort bearbeitet. Ich hoffe es hilft dir. –