ストアド プロシージャのみによる操作のカスタマイズ (LINQ to SQL)
ストアド プロシージャのみを使用してデータにアクセスすることは、一般的なシナリオです。
例
説明
最初のクエリ (動的に SQL を実行するクエリ) をストアド プロシージャのラップ メソッド呼び出しで置き換えることで、「ストアド プロシージャによる操作のカスタマイズ (LINQ to SQL)」に用意されたサンプル コードを変更できます。
次の例に示すように、CustomersByCity がこのメソッドであることを前提とします。
コード
<[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));
}
次のコードは、動的 SQL を使わずに実行されます。
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();