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.
oleh Rick Anderson
Tambahkan Model
Ada tiga cara untuk mendekati Entity Framework:
- Database-first: Anda mulai dengan database, dan Entity Framework menghasilkan kode.
- Model-first: Anda mulai dengan model visual, dan Entity Framework menghasilkan database dan kode.
- Code-first: Anda mulai dengan kode, dan Entity Framework menghasilkan database.
Kami menggunakan pendekatan code-first, jadi kami mulai dengan mendefinisikan objek domain kami sebagai POCO (objek CLR biasa). Dengan pendekatan code-first, objek domain tidak memerlukan kode tambahan apa pun untuk mendukung lapisan database, seperti transaksi atau persistensi. (Secara khusus, mereka tidak perlu mewarisi dari kelas EntityObject .) Anda masih dapat menggunakan anotasi data untuk mengontrol cara Kerangka Kerja Entitas membuat skema database.
Karena POCO tidak membawa properti tambahan apa pun yang menjelaskan status database, MEREKA dapat dengan mudah diserialisasikan ke JSON atau XML. Namun, itu tidak berarti Anda harus selalu mengekspos model Kerangka Kerja Entitas Anda langsung ke klien, seperti yang akan kita lihat nanti dalam tutorial.
Kami akan membuat POCO berikut:
- Produk
- Pesanan
- OrderDetail
Untuk membuat setiap kelas, klik kanan folder Model di Penjelajah Solusi. Dari menu konteks, pilih Tambahkan lalu pilih Kelas.
Product Tambahkan kelas dengan implementasi berikut:
namespace ProductStore.Models
{
using System.ComponentModel.DataAnnotations;
public class Product
{
[ScaffoldColumn(false)]
public int Id { get; set; }
[Required]
public string Name { get; set; }
public decimal Price { get; set; }
public decimal ActualCost { get; set; }
}
}
Menurut konvensi, Kerangka Kerja Entitas menggunakan Id properti sebagai kunci utama dan memetakannya ke kolom identitas dalam tabel database. Saat membuat instans baru Product , Anda tidak akan menetapkan nilai untuk Id, karena database menghasilkan nilai .
Atribut ScaffoldColumn memberi tahu ASP.NET MVC untuk melewati Id properti saat membuat formulir editor. Atribut Wajib digunakan untuk memvalidasi model. Ini menentukan bahwa Name properti harus berupa string yang tidak kosong.
Order Tambahkan kelas :
namespace ProductStore.Models
{
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
public class Order
{
public int Id { get; set; }
[Required]
public string Customer { get; set; }
// Navigation property
public ICollection<OrderDetail> OrderDetails { get; set; }
}
}
OrderDetail Tambahkan kelas :
namespace ProductStore.Models
{
public class OrderDetail
{
public int Id { get; set; }
public int Quantity { get; set; }
public int OrderId { get; set; }
public int ProductId { get; set; }
// Navigation properties
public Product Product { get; set; }
public Order Order { get; set; }
}
}
Hubungan Kunci Asing
Pesanan berisi banyak detail pesanan, dan setiap detail pesanan mengacu pada satu produk. Untuk mewakili hubungan ini, OrderDetail kelas menentukan properti bernama OrderId dan ProductId. Entity Framework akan menyimpulkan bahwa properti ini mewakili kunci asing, dan akan menambahkan batasan kunci asing ke database.
Kelas Order dan OrderDetail juga mencakup properti "navigasi", yang berisi referensi ke objek terkait. Dengan pesanan, Anda dapat menavigasi ke produk dalam urutan dengan mengikuti properti navigasi.
Kompilasi proyek sekarang. Entity Framework menggunakan refleksi untuk menemukan properti model, sehingga memerlukan rakitan yang dikompilasi untuk membuat skema database.
Mengonfigurasi Media-Type Formatters
Formatter jenis media adalah objek yang menserialisasikan data Anda saat Web API menulis isi respons HTTP. Formatter bawaan mendukung output JSON dan XML. Secara default, kedua pemformat ini menserialisasikan semua objek menurut nilai.
Serialisasi menurut nilai membuat masalah jika grafik objek berisi referensi melingkar. Itu persis terjadi dengan Order kelas dan OrderDetail , karena masing-masing memegang referensi ke yang lain. Pemformat akan mengikuti referensi, menulis setiap objek menurut nilai, dan masuk dalam lingkaran. Oleh karena itu, kita perlu mengubah perilaku default.
Di Penjelajah Solusi, perluas folder App_Start dan buka file bernama WebApiConfig.cs. Tambahkan kode berikut ke kelas WebApiConfig:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
// New code:
var json = config.Formatters.JsonFormatter;
json.SerializerSettings.PreserveReferencesHandling =
Newtonsoft.Json.PreserveReferencesHandling.Objects;
config.Formatters.Remove(config.Formatters.XmlFormatter);
}
}
Kode ini mengatur formatter JSON untuk mempertahankan referensi objek, dan menghapus formatter XML dari alur sepenuhnya. (Anda dapat mengonfigurasi formatter XML untuk mempertahankan referensi objek, tetapi sedikit lebih banyak pekerjaan, dan kita hanya perlu JSON untuk aplikasi ini. Untuk informasi selengkapnya, lihat Menangani Referensi Objek Melingkar.)