Ich bin kürzlich zu Entity Framework 5 gewechselt. Nun möchte ich die POCO-Klassen aus einer bestehenden Datenbank generieren und außerdem brauche ich sowohl Lazy Loading als auch Change Tracking. Daher sollten alle skalaren Eigenschaften sowohl virtuelle als auch Navigationseigenschaften sein.So generieren Sie POCO-Proxies aus einer vorhandenen Datenbank
Das Hinzufügen eines neuen ADO.Net-Entitätsdatenmodells endet in einer EDMX-Datei und einigen anderen CS- und TTS-Dateien.
Erstens, ich frage mich, warum die generierten POCO-Klassen standardmäßig nicht die Anforderungen von Change Tracking Proxy erfüllen, d. H. Skalare Eigenschaften sind nicht virtuell.
Zweitens, wie kann ich Proxy-fähige Poco-Klassen generieren?
PS: Ich akzeptierte die Antwort der Slauma als die beste und einzige Antwort bisher, aber ich stimme dem ersten Teil nicht zu. Hier ist mein Argument
Slauma über zwei Probleme mit Proxy spricht: Einschränkungen und Leistung:
über die Beschränkungen für die Proxy-fähigen Einheiten: Wenn die Klassen sind in DB Ersten Methode von Entity erzeugt Framework, die Regeln, denen die Klassen folgen müssen, um Änderungs-Tracking-Proxys zu aktivieren, sind nicht so wichtig, da sie überhaupt nicht restriktiv sind. Wen kümmert es wirklich, ob die Navigationssammlungen IList oder HashSet sind? Über die Einschränkungen zu sprechen, ist nur dann sinnvoll, wenn in der Anwendung mindestens eine Klasse vorhanden ist und Tabellen daraus generiert werden sollen.
Komplexe Eigenschaften werden zuerst nicht in DB unterstützt. So können wir sie von unserer Diskussion ausschließen.
Über die Perfomance: In the addressed article und auch einige andere Experimente, die ich bisher studiert habe, sind die Ergebnisse nicht sehr überzeugend Proxy für Snapshot abzulehnen. Zuerst wurden die Experimente an einer großen Anzahl von Einheiten durchgeführt, und zwar 10.000. Es ist nicht unwahrscheinlich, dass ein Stapelprozess in Ihrer Anwendung (nicht in der Datenbank) mit einer großen Anzahl von Entitäten arbeitet, es werden jedoch bessere Ansätze wie die gespeicherte Prozedur angenommen. Zweitens, abhängig von der Art der Anwendung und den Bedürfnissen, beschäftigen wir uns in der Regel mit einer geringen Anzahl von Entitäten, zum Beispiel wenn das Repository-Muster implementiert und verwendet wird; Es gibt keinen Unterschied zwischen der Leistung von Proxy und Snapshot. Interessanterweise war in dem angesprochenen Experiment die erneute Zuweisung desselben Werts zu den Eigenschaften der einzige Fall, in dem die Proxy-Leistung dramatisch ausfällt. Aber wer macht das wirklich? Es ist sehr einfach, vorsichtig zu sein, um zu vermeiden, den Change Tracker wiederholt zu benachrichtigen. In diesem Fall tritt erneut ein erhebliches Problem auf, wenn eine große Anzahl von Zuständen behandelt wird.
Vielen Dank für Ihre Antwort. Ich stimme dem ersten Teil Ihrer Antwort nicht zu und ich habe meine Frage aktualisiert, um die Argumente widerzuspiegeln. Der zweite Teil war jedoch sehr nützlich. Ich kenne das Code-First-Modell, aber es geht mich nichts an. – Alireza
@Alireza: Teilweise stimme ich mit Ihrem Kritiker des ersten Teils überein. Ich war selbst ein Fan von Proxies zur Änderungsverfolgung (http://stackoverflow.com/a/7112470/270591) und sie waren ein Lebensretter in einem meiner Projekte. Nach Arthur Vickers Artikel wurde ich vorsichtiger, sie zu benutzen. Der erste Teil war mehr oder weniger nur ein Zitat des Standpunkts des EF-Teams, um zu erklären, warum sie wahrscheinlich den "virtuellen" Modifikator aus den Skalareigenschaften entfernt haben, wenn die neueren t4-Templates die POCOs erzeugen. – Slauma
Vielleicht haben sie argumentiert, wie du gesagt hast, aber trotzdem konnten sie lernen, Proxy wieder zu aktivieren. Dies wurde von Microsoft so leise gemacht, dass man meinen könnte, es gäbe einen Bug im Proxy. – Alireza