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

Termin "logiki biznesowej" w tym temacie odnosi się do żadnych reguł niestandardowych lub testów sprawdzania poprawności, które są stosowane do danych, przed jego wstawiony, 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 czasami nazywany "reguły biznesowe" lub "Logika domeny".Business logic is also sometimes referred to as "business rules" or "domain logic." W aplikacjach warstwowych zwykle zaprojektowano go jako Warstwa logiczna tak, aby można było jej modyfikować niezależnie od warstwy prezentacji lub Warstwa 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 Warstwa dostępu do danych, przed lub po żadnych aktualizowania, 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ć prosty jak sprawdzanie poprawności schematu, aby upewnić się, że typem pola jest niezgodny z typem kolumny 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 wchodzących w interakcję w sposób arbitralnie złożonych.Or it can consist of a set of objects that interact in arbitrarily complex ways. Zasady mogą być wykonywane jako procedury składowane 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 zaimplementowano logiki biznesowej, LINQ do SQLLINQ to SQL umożliwia Użyj klasy częściowe i metody częściowe do oddzielania logiki biznesowej z danych kodu dostępu.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 logiki biznesowej w składniku 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ć inną część klasę 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 klasy.At compile time, the two parts are merged into a single class. Ale jeśli masz można ponownie wygenerować klas jednostek przy użyciu Object Relational DesignerObject Relational Designer lub SQLMetal, możesz to zrobić, a Twoje 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.

Klasy częściowe, które definiują jednostek i DataContext zawiera metody częściowe.The partial classes that define entities and the DataContext contain partial methods. Są to punkty rozszerzeń, które można zastosować logiki biznesowej, przed i po nich żadnych aktualizacji, wstawiania lub usuwania 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 sygnatury metody i wywołuje metody w get i ustaw metod dostępu do 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 implementuje określonej metody częściowej, wszystkie odwołania do go, jak i definicja 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 kodu oddzielnych możesz wykonać, jest wymagany niezależnie od niestandardowej logiki.In the implementing definition that you write in your separate code file, you can perform whatever custom logic is required. Można używać z częściowa samej klasy jako warstwa domeny, lub można wywołać z definicja implementującej metody częściowej w 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 prawidłowo jest oddzielony od zarówno kod dostępu do danych i kodu 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 punktów rozszerzalnościA 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 pamiętać, że wstawiania, aktualizowania i usuwania metody są definiowane 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, aktualizować i usuwać metody w klasie częściowej LINQ do SQLLINQ to SQL środowiska uruchomieniowego wywoła je zamiast metody domyślnej 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. Umożliwia zastąpienie zachowania domyślnego dla tworzenia / odczytu / aktualizacji / 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();  
        }  

Klas jednostek ma trzy metody, które są wywoływane przez LINQ do SQLLINQ to SQL środowiska uruchomieniowego podczas tworzenia, załadowane i zweryfikowane jednostki (gdy SubmitChanges jest nazywany).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). Klasy jednostki mają również dwie metody częściowe dla każdej właściwości, który jest wywoływana przed skonfigurowaniem właściwości i jeden, które jest wywoływana po wykonaniu.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ładowy kod przedstawia niektóre generowane dla metody 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 set 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();  
        }  
     }  
}  

W Twojej część klasy 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 zostanie wyświetlone IntelliSense dla definicji metody w drugiej 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 na temat dodawania reguł biznesowych do aplikacji przy użyciu metody częściowe 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:

Porady: Dodawanie walidacji do klas jednostekHow to: Add validation to entity classes

Wskazówki: Dostosowywanie wstawiania, aktualizowania i usuwania zachowanie 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
LINQ do SQL narzędzia w programie Visual StudioLINQ to SQL Tools in Visual Studio
SqlMetal.exe (narzędzie generowania kodu)SqlMetal.exe (Code Generation Tool)