Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Dalam LINQ ke SQL, model objek yang dinyatakan dalam bahasa pemrograman pengembang dipetakan ke model data database relasional. Operasi pada data kemudian dilakukan sesuai dengan model objek.
Dalam skenario ini, Anda tidak mengeluarkan perintah database (misalnya, INSERT) ke database. Sebagai gantinya, Anda mengubah nilai dan menjalankan metode dalam model objek Anda. Saat Anda ingin mengkueri database atau mengirimkannya perubahan, LINQ ke SQL menerjemahkan permintaan Anda ke dalam perintah SQL yang benar dan mengirim perintah tersebut ke database.
Elemen paling mendasar dalam model objek LINQ ke SQL dan hubungannya dengan elemen dalam model data relasional dirangkum dalam tabel berikut:
| LINQ untuk Model Objek SQL | Model Data Relasional |
|---|---|
| Kelas entitas | Tabel |
| Anggota kelas | kolom |
| Asosiasi | Hubungan kunci asing |
| Metode | Prosedur atau Fungsi Tersimpan |
Nota
Deskripsi berikut mengasumsikan bahwa Anda memiliki pengetahuan dasar tentang model dan aturan data relasional.
LINQ ke Kelas Entitas SQL dan Tabel Database
Di LINQ ke SQL, tabel database diwakili oleh kelas entitas. Kelas entitas seperti kelas lain yang mungkin Anda buat kecuali Anda membuat anotasi kelas dengan menggunakan informasi khusus yang mengaitkan kelas dengan tabel database. Anda membuat anotasi ini dengan menambahkan atribut kustom (TableAttribute) ke deklarasi kelas Anda, seperti dalam contoh berikut:
Contoh
[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
Hanya instans kelas yang dideklarasikan sebagai tabel (yaitu, kelas entitas) yang dapat disimpan ke database.
Untuk informasi selengkapnya, lihat bagian Atribut Tabel dari PemetaanAttribute-Based.
LINQ ke Anggota Kelas SQL dan Kolom Database
Selain mengaitkan kelas dengan tabel, Anda menunjuk bidang atau properti untuk mewakili kolom database. Untuk tujuan ini, LINQ ke SQL mendefinisikan ColumnAttribute atribut , seperti dalam contoh berikut:
Contoh
[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
Hanya bidang dan properti yang dipetakan ke kolom yang disimpan atau diambil kembali dari database. Yang tidak dinyatakan sebagai kolom dianggap sebagai bagian sementara dari logika aplikasi Anda.
Atribut ColumnAttribute ini memiliki berbagai properti yang dapat Anda gunakan untuk menyesuaikan anggota ini yang mewakili kolom (misalnya, menunjuk anggota sebagai mewakili kolom kunci utama). Untuk informasi selengkapnya, lihat bagian Atribut Kolom dari PemetaanAttribute-Based.
LINQ untuk Asosiasi SQL dan Hubungan Foreign Key pada Database
Di LINQ ke SQL, Anda mewakili asosiasi database (seperti hubungan kunci asing ke kunci utama) dengan menerapkan atribut AssociationAttribute. Di bagian kode berikut, kelas Order memiliki properti Customer yang dilengkapi dengan atribut AssociationAttribute. Properti ini dan atributnya membuat kelas Order memiliki hubungan dengan kelas Customer.
Contoh kode berikut menunjukkan properti Customer dari kelas Order.
Contoh
[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
Untuk informasi selengkapnya, lihat bagian Atribut Asosiasi dari PemetaanAttribute-Based.
LINQ ke Metode SQL dan Prosedur yang Tersimpan di Basis Data
LINQ ke SQL mendukung prosedur tersimpan dan fungsi yang ditentukan pengguna. Di LINQ ke SQL, Anda memetakan abstraksi yang ditentukan database ini ke objek klien sehingga Anda dapat mengaksesnya dengan cara yang sangat diketik dari kode klien. Tanda tangan metode menyerupai sedekat mungkin tanda tangan prosedur dan fungsi yang ditentukan dalam database. Anda dapat menggunakan IntelliSense untuk menemukan metode ini.
Himpunan hasil yang dikembalikan oleh panggilan ke prosedur yang dipetakan adalah koleksi yang bertipe kuat.
LINQ ke SQL memetakan prosedur tersimpan dan fungsi yang disimpan ke metode dengan menggunakan atribut FunctionAttribute dan ParameterAttribute. Metode yang mewakili prosedur tersimpan dibedakan dari metode yang mewakili fungsi yang ditentukan pengguna oleh IsComposable properti . Jika properti ini diatur ke false (default), metode mewakili prosedur tersimpan. Jika diatur ke true, metode mewakili fungsi database.
Nota
Jika Anda menggunakan Visual Studio, Anda dapat menggunakan Object Relational Designer untuk membuat metode yang dipetakan ke prosedur tersimpan dan fungsi yang ditentukan pengguna.
Contoh
// 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
Untuk informasi selengkapnya, lihat bagian Atribut Fungsi, Atribut Prosedur Tersimpan, dan Atribut Parameter Attribute-Based Pemetaan dan Prosedur Tersimpan.