Aracılığıyla paylaş


Kısmi Yöntemler Kullanarak İş Mantığı Ekleme

Kısmi yöntemler kullanarak LINQ to SQL projelerinizde Visual Basic ve C# tarafından oluşturulan kodu özelleştirebilirsiniz. LINQ to SQL tarafından oluşturulan kod, imzaları kısmi bir yöntemin parçası olarak tanımlar. yöntemini uygulamak istiyorsanız, kendi kısmi yönteminizi ekleyebilirsiniz. Kendi uygulamanızı eklemezseniz, derleyici kısmi yöntem imzasını atar ve LINQ'deki varsayılan yöntemleri SQL'e çağırır.

Not

Visual Studio kullanıyorsanız, varlık sınıflarına doğrulama ve diğer özelleştirmeler eklemek için Nesne İlişkisel Tasarımcısı kullanabilirsiniz.

Örneğin, Northwind örnek veritabanında sınıfı Customer için varsayılan eşleme aşağıdaki kısmi yöntemi içerir:

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

Kendi kısmi Customer sınıfınıza aşağıdaki gibi bir kod ekleyerek kendi yönteminizi uygulayabilirsiniz:

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

Bu yaklaşım genellikle, ve için varsayılan yöntemleri geçersiz kılmak ve nesne yaşam döngüsü olayları sırasında özellikleri doğrulamak için InsertUpdateDeleteLINQ to SQL'de kullanılır.

Daha fazla bilgi için bkz . Kısmi Yöntemler (Visual Basic) veya kısmi (Yöntem) (C# Başvurusu) (C#).

Örnek 1

Aşağıdaki örnek ilk olarak SQLMetal gibi bir kod oluşturma aracı tarafından tanımlanabileceği ve ardından iki yöntemden yalnızca birini nasıl uygulayabileceğinizi gösterir ExampleClass .

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

Örnek 2

Aşağıdaki örnekte ve Order varlıkları arasındaki Shipper ilişki kullanılır. Yöntemler arasında kısmi yöntemleri ve DeleteShipperdeğerlerini not edinInsertShipper. Bu yöntemler LINQ ile SQL eşlemesi tarafından sağlanan varsayılan kısmi yöntemleri geçersiz kılar.

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

Ayrıca bkz.