Was passiert, wenn man POCO mit T4-Templates in Entity Framework 4.0 erstellt? Warum ist das Standardverhalten bei der Verwendung von Entity Framework 4.0 nicht zum Erstellen von POCO?Entity-Framework POCO
Antwort
Sie verlieren eine Reihe von Dingen. Ein "reines" POCO ist in einem ORM nur eingeschränkt einsetzbar, da es keine Änderungsverfolgung durchführt. Mit anderen Worten, wenn Sie das Objekt mutieren und dann Änderungen im Kontext speichern, möchten Sie, dass die geänderten Eigenschaften in der Datenbank gespeichert werden. Mit einem "reinen" POCO können Sie dies mit Snapshot-basierter Änderungsverfolgung tun, was ziemlich ineffizient ist. Sie können es auch mit Laufzeitproxies machen, die Sie zwingen, Ihre Spureigenschaften public virtual
zu machen, also haben Sie wohl kein "POCO" mehr. Außerdem bedeutet die Verwendung von Proxys, dass Sie den tatsächlichen Laufzeittyp der Instanz nicht kennen.
Sie verlieren auch einige der Convenience-Eigenschaften wie EntityState
.
"Pure" POCOs können nicht lazy laden. Auch hier können Sie mit Proxy-Typen umgehen, aber wenn Sie Proxies verwenden, haben Sie nicht wirklich ein "reines" POCO.
Darüber hinaus ist es weniger notwendig, POCO-Entitäten im Entity Framework zu verwenden als in einigen anderen ORMs. Dies liegt daran, dass Sie Ihre Entitätstypen immer mit LINQ auf POCO-Instanzen projizieren können, ohne zuerst die Entitätsinstanzen materialisieren zu müssen. Daher sind "reine" POCOs immer in einer Entity Framework-Anwendung verfügbar, selbst wenn Sie Ihre Entitäten nicht auf diese Weise zuordnen.
Könnten Sie den Komponententest mit nicht POCO kommentieren? – rkrauter
Unit-Tests mit nicht-POCOs funktioniert gut. Keine Probleme für mich. –
Danke für die Antwort! – rkrauter