Bagikan melalui


Konvensi Pertama Kode

Code First memungkinkan Anda menjelaskan model dengan menggunakan kelas C# atau Visual Basic .NET. Bentuk dasar model terdeteksi dengan menggunakan konvensi. Konvensi adalah seperangkat aturan yang digunakan untuk mengonfigurasi model konseptual secara otomatis berdasarkan definisi kelas saat bekerja dengan Code First. Konvensi didefinisikan dalam namespace System.Data.Entity.ModelConfiguration.Conventions.

Anda dapat mengonfigurasi model lebih lanjut dengan menggunakan anotasi data atau API yang fasih. Prioritas diberikan untuk konfigurasi melalui API yang fasih diikuti dengan anotasi data dan kemudian konvensi. Untuk informasi selengkapnya, lihat Anotasi Data, API Fasih - Hubungan, API Fasih - Jenis & Properti dan API Fasih dengan VB.NET.

Daftar terperinci konvensi Code First tersedia dalam Dokumentasi API. Topik ini memberikan gambaran umum tentang konvensi yang digunakan oleh Code First.

Ketik Penemuan

Saat menggunakan pengembangan Code First, Anda biasanya mulai dengan menulis kelas .NET Framework yang menentukan model konseptual (domain) Anda. Selain menentukan kelas, Anda juga perlu memberi tahu DbContext jenis mana yang ingin Anda sertakan dalam model. Untuk melakukan ini, Anda menentukan kelas konteks yang berasal dari DbContext dan mengekspos properti DbSet untuk jenis yang Ingin Anda jadikan bagian dari model. Code First akan menyertakan jenis ini dan juga akan menarik dalam jenis yang dirujuk, bahkan jika jenis yang dirujuk ditentukan dalam rakitan yang berbeda.

Jika jenis Anda berpartisipasi dalam hierarki pewarisan, cukup untuk menentukan properti DbSet untuk kelas dasar, dan jenis turunan akan secara otomatis disertakan, jika berada dalam perakitan yang sama dengan kelas dasar.

Dalam contoh berikut, hanya ada satu properti DbSet yang ditentukan pada kelas SchoolEntities (Departemen). Code First menggunakan properti ini untuk menemukan dan menarik dalam jenis yang dirujuk.

public class SchoolEntities : DbContext
{
    public DbSet<Department> Departments { get; set; }
}

public class Department
{
    // Primary key
    public int DepartmentID { get; set; }
    public string Name { get; set; }

    // Navigation property
    public virtual ICollection<Course> Courses { get; set; }
}

public class Course
{
    // Primary key
    public int CourseID { get; set; }

    public string Title { get; set; }
    public int Credits { get; set; }

    // Foreign key
    public int DepartmentID { get; set; }

    // Navigation properties
    public virtual Department Department { get; set; }
}

public partial class OnlineCourse : Course
{
    public string URL { get; set; }
}

public partial class OnsiteCourse : Course
{
    public string Location { get; set; }
    public string Days { get; set; }
    public System.DateTime Time { get; set; }
}

Jika Anda ingin mengecualikan jenis dari model, gunakan atribut NotMapped atau DbModelBuilder.Ignore fluent API.

modelBuilder.Ignore<Department>();

Konvensi Kunci Primer

Code First menyimpulkan bahwa properti adalah kunci utama jika properti pada kelas diberi nama "ID" (tidak peka huruf besar/kecil), atau nama kelas diikuti dengan "ID". Jika jenis properti kunci utama adalah numerik atau GUID, properti tersebut akan dikonfigurasi sebagai kolom identitas.

public class Department
{
    // Primary key
    public int DepartmentID { get; set; }

    . . .  

}

Konvensi Hubungan

Dalam Kerangka Kerja Entitas, properti navigasi menyediakan cara untuk menavigasi hubungan antara dua jenis entitas. Setiap objek dapat memiliki properti navigasi untuk setiap hubungan tempat objek berpartisipasi. Properti navigasi memungkinkan Anda menavigasi dan mengelola hubungan di kedua arah, mengembalikan objek referensi (jika perkalian adalah satu atau nol-atau-satu) atau koleksi (jika perkaliannya banyak). Kode Pertama menyimpulkan hubungan berdasarkan properti navigasi yang ditentukan pada jenis Anda.

Selain properti navigasi, kami sarankan Anda menyertakan properti kunci asing pada jenis yang mewakili objek dependen. Properti apa pun dengan jenis data yang sama dengan properti kunci utama utama dan dengan nama yang mengikuti salah satu format berikut mewakili kunci asing untuk hubungan: '<nama properti navigasi nama><properti> utama utama', '<nama kelas utama nama><> kunci primer', atau 'nama> properti utama utama utama'<. Jika beberapa kecocokan ditemukan, prioritas diberikan dalam urutan yang tercantum di atas. Deteksi kunci asing tidak peka huruf besar/kecil. Ketika properti kunci asing terdeteksi, Code First menyimpulkan kelipatan hubungan berdasarkan nullability kunci asing. Jika properti nullable maka hubungan terdaftar sebagai opsional; jika tidak, hubungan didaftarkan sesuai kebutuhan.

Jika kunci asing pada entitas dependen tidak dapat diubah ke null, maka Kode Pertama menetapkan penghapusan bertingkat pada hubungan. Jika kunci asing pada entitas dependen dapat diubah ke null, Code First tidak mengatur penghapusan bertingkat pada hubungan, dan ketika prinsipal dihapus, kunci asing akan diatur ke null. Perilaku penghapusan multiplikasi dan kaskade yang terdeteksi oleh konvensi dapat ditimpa dengan menggunakan API yang fasih.

Dalam contoh berikut, properti navigasi dan kunci asing digunakan untuk menentukan hubungan antara kelas Departemen dan Kursus.

public class Department
{
    // Primary key
    public int DepartmentID { get; set; }
    public string Name { get; set; }

    // Navigation property
    public virtual ICollection<Course> Courses { get; set; }
}

public class Course
{
    // Primary key
    public int CourseID { get; set; }

    public string Title { get; set; }
    public int Credits { get; set; }

    // Foreign key
    public int DepartmentID { get; set; }

    // Navigation properties
    public virtual Department Department { get; set; }
}

Catatan

Jika Anda memiliki beberapa hubungan antara jenis yang sama (misalnya, misalkan Anda menentukan kelas Orang dan Buku , di mana kelas Orang berisi properti navigasi ReviewedBooks dan AuthoredBooks dan kelas Buku berisi properti navigasi Penulis dan Peninjau ) Anda perlu mengonfigurasi hubungan secara manual dengan menggunakan Anotasi Data atau API yang fasih. Untuk informasi selengkapnya, lihat Anotasi Data - Hubungan dan API Fasih - Hubungan.

Konvensi Jenis Kompleks

Ketika Code First menemukan definisi kelas di mana kunci primer tidak dapat disimpulkan, dan tidak ada kunci primer yang terdaftar melalui anotasi data atau API fasih, maka jenisnya secara otomatis terdaftar sebagai jenis kompleks. Deteksi jenis kompleks juga mengharuskan jenis tidak memiliki properti yang mereferensikan jenis entitas dan tidak direferensikan dari properti koleksi pada jenis lain. Mengingat definisi kelas berikut Kode Pertama akan menyimpulkan bahwa Detail adalah jenis kompleks karena tidak memiliki kunci primer.

public partial class OnsiteCourse : Course
{
    public OnsiteCourse()
    {
        Details = new Details();
    }

    public Details Details { get; set; }
}

public class Details
{
    public System.DateTime Time { get; set; }
    public string Location { get; set; }
    public string Days { get; set; }
}

Konvensi String Koneksi ion

Untuk mempelajari tentang konvensi yang digunakan DbContext untuk menemukan koneksi yang akan digunakan, lihat Koneksi ion dan Model.

Menghapus Konvensi

Anda dapat menghapus salah satu konvensi yang ditentukan dalam namespace System.Data.Entity.ModelConfiguration.Conventions. Contoh berikut menghapus PluralizingTableNameConvention.

public class SchoolEntities : DbContext
{
     . . .

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        // Configure Code First to ignore PluralizingTableName convention
        // If you keep this convention, the generated tables  
        // will have pluralized names.
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
    }
}

Konvensi Kustom

Konvensi kustom didukung di EF6 dan seterusnya. Untuk informasi selengkapnya, lihat Konvensi Pertama Kode Kustom.