2009-08-18 12 views
2

Im Blog von ScottGu zeigt er, wie Methoden von Linq zu SQL-Klassen überschrieben werden, so dass Änderungen an Daten in .NET-Seite benutzerdefiniert überschrieben werden können.ADO.NET Entity Framework Benutzerdefinierte SQL-Ausdrücke für Inserts/Updates/Deletes

http://weblogs.asp.net/scottgu/archive/2007/08/27/linq-to-sql-part-8-executing-custom-sql-expressions.aspx (Custom SQL-Ausdrücke für Inserts/Updates/Löscht Teil)

Gibt es eine Möglichkeit gleiche Funktionalität in EF zu erreichen?

Antwort

6

Für EF 3.5 eine Option nicht wirklich haben hilft, andere als sprocs.

Aber für EF 4.0 haben wir eine neue Methode zum ObjectContextExecuteStoreCommand(..) und verwandten Methoden usw.

So könnte man SaveChanges() außer Kraft setzen genannt hinzugefügt, ist es nun virtuell, und interograte die ObjectStateManager für ObjectStateEntries für die Art der Suche (s) Sie interessieren sich für den EntityState, an dem Sie interessiert sind (dh eingefügt) usw.

Sobald Sie gefunden wurden, können Sie Befehle mit der neuen Methode ExecuteStoreCommand() direkt für die Datenbank ausführen. Wenn Sie AcceptChanges() auf dem ObjectStateEntry aufrufen, beenden Sie das EF, zu versuchen, Änderungen an der Datenbank zu leeren, die Sie bereits behandelt haben.

Dann können Sie die EF den Rest der Änderungen für Sie tun, indem Sie base.SaveChanges() aufrufen.

Ich weiß, das ist nicht ideal. Aber es ist die beste Abhilfe, die ich von

denken kann

Alex

+0

danke. nur um zusammenzufassen und für mich selbst zu klären; Lassen Sie mich meine Frage in 2 teilen: 1) ist es möglich, benutzerdefinierte native SQL zu Datenbank mit ef zu senden? 2) ist es möglich, einige Methoden zu überschreiben und Datenaktualisierung/Einfügen/Löschen Prozess anzupassen? Antwort für 1) nicht für 3,5, sondern für 4 mit executestorecommand(). Antwort für 2) überschreiben SaveChanges und tun, was Sie wollen. jedoch für 3.5 kann native sql nicht ausführen, aber alles andere tun. für 4 mach alles. richtig? –

+0

Yeap im Grunde. Obwohl tatsächlich in der Tat native SQL in 3.5 auch ausgeführt werden kann. weil Sie die StoreConnection von der EntityConnection abrufen können, die sich unter dem ObjectContext befindet. Das einzige, worüber Sie sich Gedanken machen müssen, sind Transaktionen (sowohl in 3.5 als auch in 4.0), aber EF funktioniert gut mit TransactionScope, so dass sogar das möglich ist. –

1

EF ermöglicht es Ihnen, diese Vorgänge auf der Registerkarte Zuordnung im Designer Stored Procedures zuzuordnen. Sie können dann die Eingabe- und Ausgabewerte für die gespeicherte Prozedur den verschiedenen Eigenschaften des Objekts zuordnen.

Hoffnung, dass

+0

Ja, aber ich bin auf der Suche für eine Implementierung auf .net Seite (wie Beispiele in Adresse) –

+0

Das Entity Framework diese Art von Konzept unterstützt für die Auswahl, aber nicht zum Aktualisieren, Einfügen und Löschen (nach bestem Wissen). Wenn Sie für diese Operationen benutzerdefinierte SQL-Skripts verwenden möchten, müssen Sie gespeicherte Prozeduren verwenden. – LorenVS

Verwandte Themen