Implementowanie logiki biznesowej (LINQ to SQL)Implementing Business Logic (LINQ to SQL)

Termin "logikę biznesową" w tym temacie odnosi się do żadnych reguł niestandardowych lub testów sprawdzania poprawności, które są stosowane do danych, przed jego wstawione, zaktualizowane lub usunięte z bazy danych.The term "business logic" in this topic refers to any custom rules or validation tests that you apply to data before it is inserted, updated or deleted from the database. Logika biznesowa jest również czasami określane jako "reguł biznesowych" lub "Logika domeny".Business logic is also sometimes referred to as "business rules" or "domain logic." W aplikacjach n warstwowych zazwyczaj służy jako logiczne warstwy tak, aby można było jej modyfikować niezależnie od warstwy prezentacji lub warstwy dostępu do danych.In n-tier applications it is typically designed as a logical layer so that it can be modified independently of the presentation layer or data access layer. Logika biznesowa może być wywoływany przez warstwę dostępu do danych, przed lub po nim żadnych aktualizacji, wstawiania lub usuwania danych w bazie danych.The business logic can be invoked by the data access layer before or after any update, insertion, or deletion of data in the database.

Logika biznesowa może być tak proste, jak sprawdzanie poprawności schematu, aby upewnić się, że typ pola jest zgodny z typem kolumny w tabeli.The business logic can be as simple as a schema validation to make sure that the type of the field is compatible with the type of the table column. Lub też może składać się z zestawu obiektów, które wchodzić w interakcje w sposób dowolnie złożone.Or it can consist of a set of objects that interact in arbitrarily complex ways. Zasady mogą być wykonywane jako procedur składowanych w bazie danych lub obiektów w pamięci.The rules may be implemented as stored procedures on the database or as in-memory objects. Jednak logika biznesowa jest implementowana, LINQ do SQLLINQ to SQL umożliwia używasz klasy częściowe i metody częściowej, aby oddzielić logikę biznesową od kod dostępu do danych.However the business logic is implemented, LINQ do SQLLINQ to SQL enables you use partial classes and partial methods to separate the business logic from the data access code.

Jak wywołuje logikę biznesową w LINQ to SQLHow LINQ to SQL Invokes Your Business Logic

Podczas generowania klasy jednostki w czasie projektowania, ręcznie lub za pomocą Object Relational DesignerObject Relational Designer lub SQLMetal, jest on zdefiniowany jako klasy częściowej.When you generate an entity class at design time, either manually or by using the Object Relational DesignerObject Relational Designer or SQLMetal, it is defined as a partial class. Oznacza to, że w osobnym pliku kodu, można zdefiniować innej części klasy jednostki, która zawiera niestandardowej logiki biznesowej.This means that, in a separate code file, you can define another part of the entity class that contains your custom business logic. W czasie kompilacji dwie części są scalane w jednej klasie.At compile time, the two parts are merged into a single class. Ale jeśli musisz ponownie wygenerować z klas jednostek za pomocą Object Relational DesignerObject Relational Designer lub SQLMetal, możesz to zrobić, a Twoja część klasy nie zostaną zmodyfikowane.But if you have to regenerate your entity classes by using the Object Relational DesignerObject Relational Designer or SQLMetal, you can do so and your part of the class will not be modified.

Częściowe klasy, które definiują jednostek i DataContext zawierają metody częściowej.The partial classes that define entities and the DataContext contain partial methods. Są to punkty rozszerzeń, które można zastosować logikę biznesową, przed i po nim żadnych update, insert czy delete dla jednostki lub właściwości jednostki.These are the extensibility points that you can use to apply your business logic before and after any update, insert, or delete for an entity or entity property. Metody częściowe mogą być uważane za zdarzenia w czasie kompilacji.Partial methods can be thought of as compile-time events. Generator kodu definiuje podpis metody i wywołuje metody get i ustaw Akcesory właściwości DataContext konstruktora, a w niektórych przypadkach w tle podczas SubmitChanges jest wywoływana.The code-generator defines a method signature and calls the methods in the get and set property accessors, the DataContext constructor, and in some cases behind the scenes when SubmitChanges is called. Jednak jeśli nie należy implementować określonej metody częściowej, wszystkie odwołania do niej definicji są usuwane w czasie kompilacji.However, if you do not implement a particular partial method, then all the references to it and the definition are removed at compile time.

W definicji implementującej zapisu w pliku osobnego kodu można wykonywać, niezależnie od logiki niestandardowej jest wymagana.In the implementing definition that you write in your separate code file, you can perform whatever custom logic is required. Częściowe klasy sama służy jako warstwa Twojej domeny, lub można wywołać z definicji implementującej metody częściowej do oddzielnych obiektu lub obiektów.You can use your partial class itself as your domain layer, or you can call from your implementing definition of the partial method into a separate object or objects. W obu przypadkach logiki biznesowej nie pozostawia żadnych śladów jest oddzielony od kodu dostępu do danych i kodzie warstwy prezentacji.Either way, your business logic is cleanly separated from both your data access code and your presentation layer code.

Bliższe spojrzenie na punkty rozszerzeńA Closer Look at the Extensibility Points

W poniższym przykładzie przedstawiono część kod wygenerowany przez Object Relational DesignerObject Relational Designer dla DataContext klasy, która ma dwie tabele: Customers i Orders.The following example shows part of the code generated by the Object Relational DesignerObject Relational Designer for the DataContext class that has two tables: Customers and Orders. Należy zauważyć, że wstawiania, aktualizowania i usuwania metody są zdefiniowane dla każdej tabeli w klasie.Note that Insert, Update, and Delete methods are defined for each table in the class.

Partial Public Class Northwnd  
    Inherits System.Data.Linq.DataContext  
  
    Private Shared mappingSource As _  
        System.Data.Linq.Mapping.MappingSource = New _  
        AttributeMappingSource  
  
    #Region "Extensibility Method Definitions"  
    Partial Private Sub OnCreated()  
    End Sub  
    Partial Private Sub InsertCustomer(instance As Customer)  
    End Sub  
    Partial Private Sub UpdateCustomer(instance As Customer)  
    End Sub  
    Partial Private Sub DeleteCustomer(instance As Customer)  
    End Sub  
    Partial Private Sub InsertOrder(instance As [Order])  
    End Sub  
    Partial Private Sub UpdateOrder(instance As [Order])  
    End Sub  
    Partial Private Sub DeleteOrder(instance As [Order])  
    End Sub  
    #End Region  
public partial class MyNorthWindDataContext : System.Data.Linq.DataContext  
    {  
        private static System.Data.Linq.Mapping.MappingSource mappingSource = new AttributeMappingSource();  
  
        #region Extensibility Method Definitions  
        partial void OnCreated();  
        partial void InsertCustomer(Customer instance);  
        partial void UpdateCustomer(Customer instance);  
        partial void DeleteCustomer(Customer instance);  
        partial void InsertOrder(Order instance);  
        partial void UpdateOrder(Order instance);  
        partial void DeleteOrder(Order instance);  
        #endregion  

W przypadku zastosowania Insert, aktualizowanie i usuwanie metody w klasie częściowej LINQ do SQLLINQ to SQL środowisko uruchomieniowe będzie wywoływać je zamiast własnej metody domyślne podczas SubmitChanges jest wywoływana.If you implement the Insert, Update and Delete methods in your partial class, the LINQ do SQLLINQ to SQL runtime will call them instead of its own default methods when SubmitChanges is called. Dzięki temu można zastąpić domyślne zachowanie tworzenia / odczyt / aktualizowanie / usuwanie operacji.This enables you to override the default behavior for create / read / update / delete operations. Aby uzyskać więcej informacji, zobacz wskazówki: dostosowywanie wstawiania, aktualizowania i usuwania zachowanie klas jednostek.For more information, see Walkthrough: Customizing the insert, update, and delete behavior of entity classes.

OnCreated Metoda jest wywoływana w konstruktorze klasy.The OnCreated method is called in the class constructor.

Public Sub New(ByVal connection As String)  
    MyBase.New(connection, mappingSource)  
    OnCreated()  
End Sub  
public MyNorthWindDataContext(string connection) :  
            base(connection, mappingSource)  
        {  
            OnCreated();  
        }  

Klasy jednostki mają trzy metody, które są wywoływane przez LINQ do SQLLINQ to SQL środowiska uruchomieniowego, gdy jednostka jest tworzone, ładowany i zweryfikować (gdy SubmitChanges nosi nazwę).The entity classes have three methods that are called by the LINQ do SQLLINQ to SQL runtime when the entity is created, loaded, and validated (when SubmitChanges is called). Klas jednostek również mieć dwóch metod częściowych dla każdej właściwości: jeden, która jest wywoływana przed ustawieniem właściwości i jeden, które jest wywoływana po.The entity classes also have two partial methods for each property, one that is called before the property is set, and one that is called after. Poniższy przykład kodu pokazuje niektóre metody generowane dla Customer klasy:The following code example shows some of the methods generated for the Customer class:

#Region "Extensibility Method Definitions"  
    Partial Private Sub OnLoaded()  
    End Sub  
    Partial Private Sub OnValidate(action As _  
        System.Data.Linq.ChangeAction)  
    End Sub  
    Partial Private Sub OnCreated()  
    End Sub  
    Partial Private Sub OnCustomerIDChanging(value As String)  
    End Sub  
    Partial Private Sub OnCustomerIDChanged()  
    End Sub  
    Partial Private Sub OnCompanyNameChanging(value As String)  
    End Sub  
    Partial Private Sub OnCompanyNameChanged()  
    End Sub  
' ...Additional Changing/Changed methods for each property.  
#region Extensibility Method Definitions  
    partial void OnLoaded();  
    partial void OnValidate();  
    partial void OnCreated();  
    partial void OnCustomerIDChanging(string value);  
    partial void OnCustomerIDChanged();  
    partial void OnCompanyNameChanging(string value);  
    partial void OnCompanyNameChanged();  
// ...additional Changing/Changed methods for each property  

Metody są wywoływane w metodzie dostępu zestaw właściwości, jak pokazano w poniższym przykładzie dla CustomerID właściwości:The methods are called in the property set accessor as shown in the following example for the CustomerID property:

Public Property CustomerID() As String  
    Set  
        If (String.Equals(Me._CustomerID, value) = False) Then  
            Me.OnCustomerIDChanging(value)  
            Me.SendPropertyChanging()  
            Me._CustomerID = value  
            Me.SendPropertyChanged("CustomerID")  
            Me.OnCustomerIDChanged()  
        End If  
    End Set  
End Property  
public string CustomerID  
{  
    set  
    {  
        if ((this._CustomerID != value))  
        {  
            this.OnCustomerIDChanging(value);  
            this.SendPropertyChanging();  
            this._CustomerID = value;  
            this.SendPropertyChanged("CustomerID");  
            this.OnCustomerIDChanged();  
        }  
     }  
}  

Twoja część klasy służy do pisania implementującej definicję metody.In your part of the class, you write an implementing definition of the method. W programie Visual Studio po wpisaniu partial zobaczysz technologii IntelliSense dla definicji metody w innej części klasy.In Visual Studio, after you type partial you will see IntelliSense for the method definitions in the other part of the class.

Partial Public Class Customer  
    Private Sub OnCustomerIDChanging(value As String)  
        ' Perform custom validation logic here.  
    End Sub  
End Class  
partial class Customer   
    {  
        partial void OnCustomerIDChanging(string value)  
        {  
            //Perform custom validation logic here.  
        }  
    }  

Aby uzyskać więcej informacji o tym, jak dodać logikę biznesową do aplikacji przy użyciu metod częściowych zobacz następujące tematy:For more information about how to add business logic to your application by using partial methods, see the following topics:

Instrukcje: dodawanie walidacji do klas jednostekHow to: Add validation to entity classes

Przewodnik: dostosowywanie zachowania wstawiania, aktualizacji i usuwania dla klas jednostekWalkthrough: Customizing the insert, update, and delete behavior of entity classes

Wskazówki: Dodawanie walidacji do klas jednostekWalkthrough: Adding Validation to Entity Classes

Zobacz teżSee Also

Klasy częściowe i metodyPartial Classes and Methods
Metody częściowePartial Methods
Narzędzia LINQ to SQL Tools w programie Visual StudioLINQ to SQL Tools in Visual Studio
SqlMetal.exe (narzędzie generowania kodu)SqlMetal.exe (Code Generation Tool)