Dela via


Lägg till affärslogik med hjälp av partiella metoder

Du kan anpassa Visual Basic- och C#-genererad kod i dina LINQ till SQL-projekt med hjälp av partiella metoder. Koden som LINQ till SQL genererar definierar signaturer som en del av en partiell metod. Om du vill implementera metoden kan du lägga till en egen partiell metod. Om du inte lägger till en egen implementering tar kompilatorn bort signaturen för partiella metoder och anropar standardmetoderna i LINQ till SQL.

Kommentar

Om du använder Visual Studio kan du använda Objektrelationsdesignern för att lägga till validering och andra anpassningar i entitetsklasser.

Standardmappningen för Customer klassen i Northwind-exempeldatabasen innehåller till exempel följande partiella metod:

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

Du kan implementera din egen metod genom att lägga till kod, till exempel följande i din egen partiella Customer klass:

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

Den här metoden används vanligtvis i LINQ till SQL för att åsidosätta standardmetoder för Insert, Update, Deleteoch för att verifiera egenskaper under objektlivscykelhändelser.

Mer information finns i Partiella metoder (Visual Basic) eller partiell (metod) (C#-referens) (C#).

Exempel 1

I följande exempel visas ExampleClass först som det kan definieras av ett kodgenererande verktyg, till exempel SQLMetal, och sedan hur du kan implementera endast en av de två metoderna.

// 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

Exempel 2

I följande exempel används relationen mellan Shipper och Order entiteter. Observera bland metoderna de partiella metoderna InsertShipper och DeleteShipper. Dessa metoder åsidosätter de standardmetoder för partiella metoder som tillhandahålls av LINQ till SQL-mappning.

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

Se även