Anpassen von Operationen durch ausschließliche Verwendung von gespeicherten Prozeduren (LINQ to SQL)
Der Zugriff auf Daten nur mit gespeicherten Prozeduren ist ein gängiges Szenario.
Beispiel
Beschreibung
Sie können das Beispiel in Anpassen von Operationen durch Verwenden gespeicherter Prozeduren (LINQ to SQL) modifizieren, indem Sie die erste Abfrage (die zu einer Ausführung von dynamischem SQL führt) durch einen Methodenaufruf ersetzen, der eine gespeicherte Prozedur umschließt.
Gehen Sie wie im folgenden Beispiel von der CustomersByCity-Methode aus.
Code
<[Function]()> _
Public Function CustomersByCity( _
<Parameter(Name:="City", DbType:="NVarChar(15)")> ByVal _
city As String) As IEnumerable(Of Customer)
Dim result = Me.ExecuteMethodCall(Me, _
(CType(MethodInfo.GetCurrentMethod(), IEnumerable(Of _
Customer))), city)
Return CType(result.ReturnValue, IEnumerable(Of Customer))
End Function
[Function()]
public IEnumerable<Customer> CustomersByCity(
[Parameter(Name = "City", DbType = "NVarChar(15)")]
string city)
{
IExecuteResult result = this.ExecuteMethodCall(this,
((MethodInfo)(MethodInfo.GetCurrentMethod())),
city);
return ((IEnumerable<Customer>)(result.ReturnValue));
}
Der folgende Code wird ohne jedes dynamische SQL ausgeführt.
Dim db As New Northwnd("...")
' Use a method call (stored procedure wrapper) instead of
' a LINQ query against the database.
Dim custQuery = db.CustomersByCity("London")
For Each custObj In custQuery
' Deferred loading of custObj.Orders uses the override
' LoadOrders. There is no dynamic SQL.
For Each ord In custObj.Orders
' Make some changes to customers/orders.
' Overrides for Customer are called during the execution
' of the following:
db.SubmitChanges()
Next
Next
NorthwindThroughSprocs db = new NorthwindThroughSprocs("...");
// Use a method call (stored procedure wrapper) instead of
// a LINQ query against the database.
var custQuery =
db.CustomersByCity("London");
foreach (Customer custObj in custQuery)
{
// Deferred loading of custObj.Orders uses the override
// LoadOrders. There is no dynamic SQL.
foreach (Order ord in custObj.Orders)
{
// Make some changes to customers/orders.
// Overrides for Customer are called during the execution
// of the following.
}
}
db.SubmitChanges();
Siehe auch
Konzepte
Aufgaben des Entwicklers beim Überschreiben des Standardverhaltens (LINQ to SQL)