Personalizar las operaciones mediante el uso exclusivo de procedimientos almacenados (LINQ to SQL)
Actualización: November 2007
Un escenario común es obtener acceso a los datos utilizando únicamente procedimientos almacenados.
Código de
Description
Puede modificar el ejemplo proporcionado en Personalizar las operaciones mediante procedimientos almacenados (LINQ to SQL) reemplazando incluso la primera consulta (que provoca la ejecución de SQL dinámico) con una llamada a método que incluya un procedimiento almacenado.
Supongamos que CustomersByCity es el método, como en el siguiente ejemplo.
Código
<[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));
}
El código siguiente se ejecuta sin SQL dinámico.
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();