Personalizzazione delle operazioni tramite l'utilizzo esclusivo di stored procedure (LINQ to SQL)
L'accesso ai dati utilizzando solo stored procedure costituisce uno scenario comune.
Esempio
Descrizione
È possibile modificare l'esempio fornito in Personalizzazione delle operazioni tramite l'utilizzo di stored procedure (LINQ to SQL) sostituendo anche la prima query, che causa l'esecuzione di SQL dinamico, con una chiamata al metodo che esegue il wrapping di un stored procedure.
Si supponga che il metodo sia CustomersByCity, come nell'esempio seguente.
Codice
<[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));
}
Il codice seguente viene eseguito senza SQL dinamico.
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();