Delen via


Bedrijfslogica toevoegen met behulp van gedeeltelijke methoden

U kunt visual Basic- en C#-gegenereerde code in uw LINQ aanpassen aan SQL-projecten met behulp van gedeeltelijke methoden. De code die LINQ naar SQL genereert, definieert handtekeningen als onderdeel van een gedeeltelijke methode. Als u de methode wilt implementeren, kunt u uw eigen gedeeltelijke methode toevoegen. Als u uw eigen implementatie niet toevoegt, verwijdert de compiler de handtekening voor gedeeltelijke methoden en roept de standaardmethoden in LINQ aan op SQL.

Notitie

Als u Visual Studio gebruikt, kunt u de Object Relational Designer gebruiken om validatie en andere aanpassingen aan entiteitsklassen toe te voegen.

De standaardtoewijzing voor de Customer klasse in de voorbeelddatabase Northwind bevat bijvoorbeeld de volgende gedeeltelijke methode:

partial void OnAddressChanged();
Partial Private Sub OnAddressChanged()
End Sub

U kunt uw eigen methode implementeren door code zoals het volgende toe te voegen aan uw eigen gedeeltelijke Customer klasse:

public partial class Customer
{
    partial void OnAddressChanged();
    partial void OnAddressChanged()
    {
        // Insert business logic here.
    }
}
Partial Class Customer
    Private Sub OnAddressChanged()
        ' Insert business logic here.
    End Sub
End Class

Deze benadering wordt doorgaans gebruikt in LINQ voor SQL om standaardmethoden voor Insert, Updateen Deleteom eigenschappen te valideren tijdens levenscyclusgebeurtenissen van objecten.

Zie Gedeeltelijke methoden (Visual Basic) of gedeeltelijk (methode) (C#-verwijzing) (C#) (C#) voor meer informatie.

Voorbeeld 1

In het volgende voorbeeld ziet ExampleClass u eerst dat deze kan worden gedefinieerd door een hulpprogramma voor het genereren van code, zoals SQLMetal, en vervolgens hoe u slechts één van de twee methoden kunt implementeren.

// Code-generating tool defines a partial class, including
// two partial methods.
partial class ExampleClass
{
    partial void onFindingMaxOutput();
    partial void onFindingMinOutput();
}

// Developer implements one of the partial methods. Compiler
// discards the signature of the other method.
partial class ExampleClass
{
    partial void onFindingMaxOutput()
    {
        Console.WriteLine("Maximum has been found.");
    }
}
' Code-generating tool defines a partial class, including 
' two partial methods. 
Partial Class ExampleClass
    Partial Private Sub OnFindingMaxOutput()
    End Sub

    Partial Private Sub OnFindingMinOutput()
    End Sub

    Sub ExportResults()
        OnFindingMaxOutput()
        OnFindingMinOutput()
    End Sub
End Class

' Developer implements one of the partial methods. Compiler
' discards the other method.
Class ExampleClass
    Private Sub OnFindingMaxOutput()
        Console.WriteLine("Maximum has been found.")
    End Sub
End Class

Voorbeeld 2

In het volgende voorbeeld wordt de relatie tussen Shipper en Order entiteiten gebruikt. Noteer onder de methoden de gedeeltelijke methoden en InsertShipper DeleteShipper. Deze methoden overschrijven de standaard gedeeltelijke methoden die door LINQ aan SQL-toewijzing worden geleverd.

public static int LoadOrdersCalled = 0;
private IEnumerable<Order> LoadOrders(Shipper shipper)
{
    LoadOrdersCalled++;
    return this.Orders.Where(o => o.ShipVia == shipper.ShipperID);
}

public static int LoadShipperCalled = 0;
private Shipper LoadShipper(Order order)
{
    LoadShipperCalled++;
    return this.Shippers.Single(s => s.ShipperID == order.ShipVia);
}

public static int InsertShipperCalled = 0;
partial void InsertShipper(Shipper shipper)
{
    InsertShipperCalled++;
    // Call a Web service to perform an insert operation.
    InsertShipperService(shipper);
}

public static int UpdateShipperCalled = 0;
private void UpdateShipper(Shipper original, Shipper current)
{
    Shipper shipper = new Shipper();
    UpdateShipperCalled++;
    // Call a Web service to update shipper.
    InsertShipperService(shipper);
}

public static bool DeleteShipperCalled;
partial void DeleteShipper(Shipper shipper)
{
    DeleteShipperCalled = true;
}
Public Shared LoadOrdersCalled As Integer = 0
Private Function LoadOrders(ByVal shipper As Shipper) As  _
    IEnumerable(Of Order)
    LoadOrdersCalled += 1
    Return Me.Orders.Where(Function(o) o.ShipVia = _
        shipper.ShipperID)
End Function

Public Shared LoadShipperCalled As Integer = 0
Private Function LoadShipper(ByVal order As Order) As Shipper
    LoadShipperCalled += 1
    Return Me.Shippers.Single(Function(s) s.ShipperID = _
        order.ShipVia)
End Function

Public Shared InsertShipperCalled As Integer = 0
Private Sub InsertShipper(ByVal instance As Shipper)
    InsertShipperCalled += 1
    ' Call a Web service to perform an insert operation.
    InsertShipperService(shpr:=Nothing)
End Sub

Public Shared UpdateShipperCalled As Integer = 0
Private Sub UpdateShipper(ByVal original As Shipper, ByVal current _
    As Shipper)
    UpdateShipperCalled += 1
    ' Call a Web service to update shipper.
    InsertShipperService(shpr:=Nothing)
End Sub

Public Shared DeleteShipperCalled As Boolean
Private Sub DeleteShipper(ByVal instance As Shipper)
    DeleteShipperCalled = True
End Sub

Zie ook