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.
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 true
yö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.