Bagikan melalui


Model Objek LINQ untuk SQL

Dalam LINQ untuk 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 untuk SQL menerjemahkan permintaan Anda ke dalam perintah SQL yang benar dan mengirim perintah tersebut ke database.

Screenshot that shows the Linq Object Model.

Elemen paling mendasar dalam LINQ untuk SQL model objek dan hubungannya dengan elemen dalam model data relasional diringkas 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

Catatan

Deskripsi berikut mengasumsikan bahwa Anda memiliki pengetahuan dasar tentang model dan aturan data relasional.

Kelas LINQ untuk Entity SQL dan Tabel Database

Dalam LINQ untuk 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 dinyatakan sebagai tabel (yaitu, kelas entitas) yang dapat disimpan ke database.

Untuk informasi selengkapnya, lihat bagian Atribut Tabel dari Pemetaan Berbasis Atribut.

Anggota Kelas LINQ untuk SQL dan Kolom Database

Selain mengaitkan kelas dengan tabel, Anda menunjuk bidang atau properti untuk mewakili kolom database. Untuk tujuan ini, LINQ untuk SQL mendefinisikan atribut ColumnAttribute, 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 dipertahankan atau diambil dari database. Kolom 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 primer). Untuk informasi selengkapnya, lihat bagian Atribut Kolom dari Pemetaan Berbasis Atribut.

Asosiasi LINQ ke SQL dan Hubungan Kunci Asing Database

Dalam LINQ untuk SQL, Anda mewakili asosiasi database (seperti kunci asing ke hubungan kunci primer) dengan menerapkan atribut AssociationAttribute. Di segmen kode berikut, kelas Order berisi properti Customer yang memiliki atribut AssociationAttribute. Properti ini dan atributnya menyediakan kelas Order dengan hubungan ke 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 Pemetaan Berbasis Atribut.

Metode LINQ ke SQL dan Prosedur Tersimpan Database

LINQ ke SQL mendukung prosedur tersimpan dan fungsi yang ditentukan pengguna. Di LINQ ke SQL, Anda memetakan abstraksi yang ditentukan basis data ini ke objek klien sehingga Anda dapat mengaksesnya dengan cara yang diketik dengan kuat 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.

Set hasil yang dikembalikan oleh panggilan ke prosedur yang dipetakan adalah koleksi yang diketik dengan kuat.

LINQ untuk SQL memetakan prosedur dan fungsi tersimpan ke metode dengan menggunakan atribut FunctionAttribute dan ParameterAttribute. Metode yang mewakili prosedur tersimpan dibedakan dari metode yang mewakili fungsi yang ditentukan pengguna oleh properti IsComposable. Jika properti ini diatur ke false (default), metode mewakili prosedur tersimpan. Jika diatur ke true, metode mewakili fungsi database.

Catatan

Jika Anda menggunakan Visual Studio, Anda dapat menggunakan Perancang Relational Objek 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 dari Pemetaan Berbasis Atribut dan Prosedur Tersimpan.

Lihat juga