Bagikan melalui


Menyimpan Data Terkait

Selain entitas yang terisolasi, Anda juga dapat menggunakan hubungan yang ditentukan dalam model Anda.

Tip

Anda dapat melihat contoh artikel ini di GitHub.

Menambahkan grafik entitas baru

Jika Anda membuat beberapa entitas terkait baru, menambahkan salah satunya ke konteks akan menyebabkan yang lain juga ditambahkan.

Dalam contoh berikut, blog dan tiga posting terkait semuanya disisipkan ke dalam database. Postingan ditemukan dan ditambahkan, karena dapat dijangkau melalui Blog.Posts properti navigasi.

using (var context = new BloggingContext())
{
    var blog = new Blog
    {
        Url = "http://blogs.msdn.com/dotnet",
        Posts = new List<Post>
        {
            new Post { Title = "Intro to C#" },
            new Post { Title = "Intro to VB.NET" },
            new Post { Title = "Intro to F#" }
        }
    };

    context.Blogs.Add(blog);
    context.SaveChanges();
}

Tip

Gunakan properti EntityEntry.State untuk mengatur status hanya satu entitas. Contohnya,context.Entry(blog).State = EntityState.Modified.

Jika Anda mereferensikan entitas baru dari properti navigasi entitas yang sudah dilacak oleh konteks, entitas akan ditemukan dan dimasukkan ke dalam database.

Dalam contoh berikut, post entitas disisipkan karena ditambahkan ke Posts properti blog entitas yang diambil dari database.

using (var context = new BloggingContext())
{
    var blog = context.Blogs.Include(b => b.Posts).First();
    var post = new Post { Title = "Intro to EF Core" };

    blog.Posts.Add(post);
    context.SaveChanges();
}

Mengubah hubungan

Jika Anda mengubah properti navigasi entitas, perubahan yang sesuai akan dilakukan ke kolom kunci asing dalam database.

Dalam contoh berikut, entitas diperbarui post menjadi milik entitas baru blog karena properti navigasinya Blog diatur untuk menunjuk ke blog. Perhatikan bahwa blog juga akan dimasukkan ke dalam database karena merupakan entitas baru yang direferensikan oleh properti navigasi entitas yang sudah dilacak oleh konteks (post).

using (var context = new BloggingContext())
{
    var blog = new Blog { Url = "http://blogs.msdn.com/visualstudio" };
    var post = context.Posts.First();

    post.Blog = blog;
    context.SaveChanges();
}

Menghapus hubungan

Anda dapat menghapus hubungan dengan mengatur navigasi referensi ke null, atau menghapus entitas terkait dari navigasi koleksi.

Menghapus hubungan dapat memiliki efek samping pada entitas dependen, sesuai dengan perilaku penghapusan kaskade yang dikonfigurasi dalam hubungan.

Secara default, untuk hubungan yang diperlukan, perilaku penghapusan bertingkat dikonfigurasi dan entitas turunan/dependen akan dihapus dari database. Untuk hubungan opsional, penghapusan bertingkat tidak dikonfigurasi secara default, tetapi properti kunci asing akan diatur ke null.

Lihat Hubungan Yang Diperlukan dan Opsional untuk mempelajari tentang bagaimana keharusan hubungan dapat dikonfigurasi.

Lihat Penghapusan Kaskade untuk detail selengkapnya tentang cara kerja perilaku penghapusan berkala, cara kerjanya dapat dikonfigurasi secara eksplisit dan bagaimana perilaku tersebut dipilih menurut konvensi.

Dalam contoh berikut, penghapusan kaskade dikonfigurasi pada hubungan antara Blog dan Post, sehingga post entitas dihapus dari database.

using (var context = new BloggingContext())
{
    var blog = context.Blogs.Include(b => b.Posts).First();
    var post = blog.Posts.First();

    blog.Posts.Remove(post);
    context.SaveChanges();
}