Warum ICollection und nicht IEnumerable oder List & lt; T & gt; auf viele-viele / eins-viele Beziehungen?
Ich sehe oft in tutorials, mit navigation Eigenschaften wie ICollection<T>
.
Ist dies eine zwingende Voraussetzung für das Entity Framework? Kann ich IEnumerable
?
Was ist der Hauptzweck der Verwendung ICollection
statt IEnumerable
oder sogar List<T>
?
InformationsquelleAutor der Frage Jan Carlo Viray | 2012-04-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
In der Regel, was Sie wählen, wird davon abhängen, welche Methoden Sie zugreifen müssen. Im Allgemeinen -
IEnumerable<>
(MSDN: http://msdn.microsoft.com/en-us/library/system.collections.ienumerable.aspx) für eine Liste von Objekten, die nur zu Durchlaufen,ICollection<>
(MSDN: http://msdn.microsoft.com/en-us/library/92t2ye13.aspx) für eine Liste von Objekten, die muss Durchlaufen und geändert werden,List<>
für eine Liste von Objekten, die muss Durchlaufen, geändert, sortiert, etc (Siehe hier für eine vollständige Liste: http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx).Mehr aus einer spezifischen Sicht, lazy loading ins Spiel kommt, mit der Wahl der Art. Standardmäßig navigation Eigenschaften in Entity Framework kommt mit änderungsverfolgung und Stellvertreter. In Reihenfolge für die dynamische proxy erstellt werden soll, um eine navigation, die Eigenschaft, die virtuelle Art muss implementieren
ICollection
.Weitere Informationen über das Definieren und Verwalten von BeziehungenMSDN
InformationsquelleAutor der Antwort Travis J
ICollection<T>
verwendet, da dieIEnumerable<T>
- Schnittstelle bietet keine Möglichkeit, Elemente hinzufügen, Elemente entfernen, oder sonst eine änderung der Auflistung.InformationsquelleAutor der Antwort Justin Niessner
Beantwortung Ihrer Frage über
List<T>
:List<T>
ist eine Klasse; die Angabe einer Schnittstelle ermöglicht mehr Flexibilität bei der Umsetzung. Eine bessere Frage ist "warum nichtIList<T>
?"Diese Frage zu beantworten, überlegen Sie, was
IList<T>
fügtICollection<T>
: integer Indizierung, was bedeutet, dass die Elemente einer beliebigen Reihenfolge abgerufen werden können durch Bezugnahme auf diese Bestellung. Dies ist wahrscheinlich nicht sinnvoll ist in den meisten Fällen, da sich die Gegenstände wohl bestellt werden müssen, unterschiedlich in verschiedenen Kontexten.InformationsquelleAutor der Antwort phoog
Gibt es einige Grundlagen, Unterschied zwischen ICollection und IEnumerable
Einfaches Programm:
InformationsquelleAutor der Antwort Ramakrishnan
Die grundlegende Idee der Verwendung von
ICollection
ist ein interface, das auf readonly-Zugriff auf eine begrenzte Menge von Daten. In der Tat haben Sie ein ICollection.Zählen Eigenschaft.IEnumerable
ist besser geeignet für einige Kette der Daten, wo Sie Lesen, bis einige logische Punkt, eine Bedingung esplicitly angegeben, die von Verbrauchern oder bis das Ende der Aufzählung.InformationsquelleAutor der Antwort Tigran
Ich erinnere mich, es auf diese Weise:
IEnumerable hat eine Methode GetEnumerator (), die es einem ermöglicht, durch Lesen der Werte in einer Sammlung, aber nicht schreiben. Die meisten von der Komplexität der Verwendung der enumerator ist gesorgt für uns von der for-each-Anweisung in C#. IEnumerable hat nur eine Eigenschaft: Strom, der gibt das aktuelle element.
ICollection implementiert IEnumerable und fügt einige zusätzliche Eigenschaften, die Verwendung, die Zählen. Die generische version von ICollection implementiert die Add() und Remove() Methoden.
IList implementiert IEnumerable und ICollection.
InformationsquelleAutor der Antwort user3918295
Was ich in der Vergangenheit getan haben ist erklären meine innere Klasse Sammlungen mit
IList<Class>
ICollection<Class>
oderIEnumerable<Class>
(wenn statische Liste) je nach dem, ob ich oder nicht haben zu tun, eine beliebige Anzahl der folgenden, die in eine Methode in meinem repository: auflisten, Sortieren/Reihenfolge ändern oder. Wenn ich nur aufzählen (und vielleicht Sortieren) über die Gegenstände dann erstelle ich eine temp -List<Class>
arbeiten mit der Sammlung in eine IEnumerable-Methode. Ich denke, dass dieses Verfahren nur dann wirksam ist, wenn die Sammlung ist relativ klein, aber es kann gut sein, Praxis im Allgemeinen, idk. Bitte korrigieren Sie mich, wenn es Anhaltspunkte dafür gibt, warum wäre dies nicht eine gute Praxis.InformationsquelleAutor der Antwort yardpenalty
Navigation Eigenschaften werden in der Regel definiert als virtuelle, so dass Sie den Vorteil von bestimmten Entity Framework-Funktionen wie lazy loading.
Wenn ein Navigations-Eigenschaft können mehrere Personen (wie bei viele-zu-viele-oder eins-zu-viele Beziehungen), Ihr Typ muss es sich um eine Liste, in der Einträge können Hinzugefügt, gelöscht und aktualisiert werden, wie ICollection.
https://www.asp.net/mvc/overview/getting-started/getting-started-with-ef-using-mvc/creating-an-entity-framework-data-model-for-an-asp-net-mvc-application
InformationsquelleAutor der Antwort LewisAntonio803