LINQ to SQL Nesne Modeli

LINQ to SQL'de, geliştiricinin programlama diliyle ifade edilen bir nesne modeli ilişkisel veritabanının veri modeliyle eşlenir. Daha sonra veriler üzerindeki işlemler nesne modeline göre yürütülür.

Bu senaryoda, veritabanına veritabanı komutları (örneğin, INSERT) vermezsiniz. Bunun yerine, değerleri değiştirir ve nesne modelinizde yöntemleri yürütürsiniz. Veritabanını sorgulamak veya değişiklikleri göndermek istediğinizde, LINQ to SQL isteklerinizi doğru SQL komutlarına çevirir ve bu komutları veritabanına gönderir.

Screenshot that shows the Linq Object Model.

LINQ to SQL nesne modelindeki en temel öğeler ve ilişkisel veri modelindeki öğelerle ilişkileri aşağıdaki tabloda özetlenmiştir:

LINQ to SQL Nesne Modeli İlişkisel Veri Modeli
Varlık sınıfı Tablo
Sınıf üyesi Sütun
İlişki Yabancı anahtar ilişkisi
Metot Saklı Yordam veya İşlev

Not

Aşağıdaki açıklamalarda ilişkisel veri modeli ve kuralları hakkında temel bilgilere sahip olduğunuz varsayılır.

LINQ to SQL Varlık Sınıfları ve Veritabanı Tabloları

LINQ to SQL'de veritabanı tablosu bir varlık sınıfıyla temsil edilir. Varlık sınıfı, sınıfı bir veritabanı tablosuyla ilişkilendiren özel bilgiler kullanarak sınıfa açıklama eklemeniz dışında oluşturabileceğiniz diğer sınıflara benzer. Aşağıdaki örnekte olduğu gibi sınıf bildiriminize özel bir öznitelik (TableAttribute) ekleyerek bu ek açıklamayı yaparsınız:

Örnek

[Table(Name = "Customers")]
public class Customerzz
{
    public string CustomerID;
    // ...
    public string City;
}
<Table(Name:="Customers")> _
Public Class Customer
    Public CustomerID As String
    ' ...
    Public City As String
End Class

Yalnızca tablo olarak bildirilen sınıfların örnekleri (varlık sınıfları) veritabanına kaydedilebilir.

Daha fazla bilgi için Öznitelik Tabanlı Eşleme'nin Tablo Özniteliği bölümüne bakın.

LINQ to SQL Sınıf Üyeleri ve Veritabanı Sütunları

Sınıfları tablolarla ilişkilendirmeye ek olarak, veritabanı sütunlarını temsil eden alanları veya özellikleri de belirlersiniz. Bu amaçla LINQ to SQL özniteliğini ColumnAttribute aşağıdaki örnekte olduğu gibi tanımlar:

Örnek

[Table(Name = "Customers")]
public class Customer
{
    [Column(IsPrimaryKey = true)]
    public string CustomerID;
    [Column]
    public string City;
}
<Table(Name:="Customers")> _
Public Class Customer
    <Column(IsPrimaryKey:=True)> _
    Public CustomerID As String

    <Column()> _
    Public City As String
End Class

Yalnızca sütunlara eşlenen alanlar ve özellikler veritabanında kalıcı olarak kalır veya veritabanından alınır. Sütun olarak bildirilmeyenler, uygulama mantığınızın geçici parçaları olarak kabul edilir.

özniteliği, ColumnAttribute sütunları temsil eden bu üyeleri özelleştirmek için kullanabileceğiniz çeşitli özelliklere sahiptir (örneğin, bir üyeyi birincil anahtar sütununu temsil ediyor olarak belirleme). Daha fazla bilgi için Öznitelik Tabanlı Eşleme'nin Sütun Özniteliği bölümüne bakın.

LINQ to SQL İlişkilendirmeleri ve Veritabanı Yabancı Anahtar İlişkileri

LINQ to SQL'de özniteliğini uygulayarak AssociationAttribute veritabanı ilişkilendirmelerini (yabancı anahtardan birincil anahtara ilişkiler gibi) temsil edebilirsiniz. Aşağıdaki kod kesiminde Order sınıfı, özniteliği olan bir Customer AssociationAttribute özellik içerir. Bu özellik ve özniteliği sınıfıyla Order bir ilişki Customer sağlar.

Aşağıdaki kod örneği sınıfından Customer özelliğini Order gösterir.

Örnek

[Association(Name="FK_Orders_Customers", Storage="_Customer", ThisKey="CustomerID", IsForeignKey=true)]
public Customer Customer
{
    get
    {
        return this._Customer.Entity;
    }
    set
    {
        Customer previousValue = this._Customer.Entity;
        if (((previousValue != value)
                    || (this._Customer.HasLoadedOrAssignedValue == false)))
        {
            this.SendPropertyChanging();
            if ((previousValue != null))
            {
                this._Customer.Entity = null;
                previousValue.Orders.Remove(this);
            }
            this._Customer.Entity = value;
            if ((value != null))
            {
                value.Orders.Add(this);
                this._CustomerID = value.CustomerID;
            }
            else
            {
                this._CustomerID = default(string);
            }
            this.SendPropertyChanged("Customer");
        }
    }
}
<Association(Name:="FK_Orders_Customers", Storage:="_Customer", ThisKey:="CustomerID", IsForeignKey:=true)>  _
Public Property Customer() As Customer
    Get
        Return Me._Customer.Entity
    End Get
    Set
        Dim previousValue As Customer = Me._Customer.Entity
        If (((previousValue Is value)  _
                    = false)  _
                    OrElse (Me._Customer.HasLoadedOrAssignedValue = false)) Then
            Me.SendPropertyChanging
            If ((previousValue Is Nothing)  _
                        = false) Then
                Me._Customer.Entity = Nothing
                previousValue.Orders.Remove(Me)
            End If
            Me._Customer.Entity = value
            If ((value Is Nothing)  _
                        = false) Then
                value.Orders.Add(Me)
                Me._CustomerID = value.CustomerID
            Else
                Me._CustomerID = CType(Nothing, String)
            End If
            Me.SendPropertyChanged("Customer")
        End If
    End Set
End Property

Daha fazla bilgi için Öznitelik Tabanlı Eşleme'nin İlişkilendirme Özniteliği bölümüne bakın.

LINQ to SQL Yöntemleri ve Veritabanı Saklı Yordamları

LINQ to SQL saklı yordamları ve kullanıcı tanımlı işlevleri destekler. LINQ to SQL'de, bu veritabanı tanımlı soyutlamaları istemci nesneleriyle eşlersiniz, böylece bunlara istemci kodundan kesin olarak yazılmış bir şekilde erişebilirsiniz. Yöntem imzaları, veritabanında tanımlanan yordamların ve işlevlerin imzalarına olabildiğince benzer. Bu yöntemleri bulmak için IntelliSense'i kullanabilirsiniz.

Eşlenmiş bir yordam çağrısı tarafından döndürülen sonuç kümesi, kesin olarak türü belirlenmiş bir koleksiyondur.

LINQ to SQL, ve ParameterAttribute özniteliklerini kullanarak saklı yordamları ve işlevleri yöntemlerle FunctionAttribute eşler. Saklı yordamları temsil eden yöntemler, özelliği tarafından IsComposable kullanıcı tanımlı işlevleri temsil edenlerden ayırt edilir. Bu özellik (varsayılan) olarak ayarlanırsa false , yöntemi saklı yordamı temsil eder. olarak ayarlanırsa trueyöntemi bir veritabanı işlevini temsil eder.

Not

Visual Studio kullanıyorsanız, saklı yordamlara ve kullanıcı tanımlı işlevlere eşlenen yöntemler oluşturmak için Nesne İlişkisel Tasarımcısı kullanabilirsiniz.

Örnek

// This is an example of a stored procedure in the Northwind
// sample database. The IsComposable property defaults to false.
[Function(Name="dbo.CustOrderHist")]
public ISingleResult<CustOrderHistResult> CustOrderHist([Parameter(Name="CustomerID", DbType="NChar(5)")] string customerID)
{
    IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), customerID);
    return ((ISingleResult<CustOrderHistResult>)(result.ReturnValue));
}
   ' This is an example of a stored procedure in the Northwind
   ' sample database. The IsComposable property defaults to false.
   <FunctionAttribute(Name:="dbo.CustOrderHist")> _
Public Function CustOrderHist(<Parameter(Name:="CustomerID", DbType:="NChar(5)")> ByVal customerID As String) As ISingleResult(Of CustOrderHistResult)
       Dim result As IExecuteResult = Me.ExecuteMethodCall(Me, CType(MethodInfo.GetCurrentMethod, MethodInfo), customerID)
       Return CType(result.ReturnValue, ISingleResult(Of CustOrderHistResult))
   End Function

Daha fazla bilgi için Öznitelik Tabanlı Eşleme ve Saklı Yordamlar'ın İşlev Özniteliği, Saklı Yordam Özniteliği ve Parametre Özniteliği bölümlerine bakın.

Ayrıca bkz.