Saya telah mencari sumber daya tentang cara mendeklarasikan hubungan kunci asing dan kendala lainnya menggunakan kode EF 4.1 pertama tanpa banyak keberuntungan. Pada dasarnya saya membangun model data dalam kode dan menggunakan MVC3 untuk menanyakan model itu. Semuanya bekerja melalui MVC yang sangat bagus (pujian untuk Microsoft!) Tetapi sekarang saya ingin TIDAK berfungsi karena saya perlu memiliki batasan model data.
Misalnya, saya memiliki objek Order yang memiliki banyak properti yang merupakan objek eksternal (tabel). Saat ini saya dapat membuat Order tanpa masalah, tetapi tanpa dapat menambahkan kunci asing atau objek eksternal. MVC3 mengatur ini tidak masalah.
Saya menyadari bahwa saya hanya dapat menambahkan objek sendiri di kelas pengontrol sebelum menyimpan, tetapi saya ingin panggilan ke DbContext.SaveChanges () gagal jika hubungan batasan belum terpenuhi.
INFORMASI BARU
Jadi, secara khusus, saya ingin pengecualian terjadi ketika saya mencoba untuk menyimpan objek Order tanpa menentukan objek pelanggan. Ini tampaknya bukan perilaku jika saya hanya membuat objek seperti yang dijelaskan di sebagian besar dokumentasi EF Code First.
Kode terbaru:
public class Order
{
public int Id { get; set; }
[ForeignKey( "Parent" )]
public Patient Patient { get; set; }
[ForeignKey("CertificationPeriod")]
public CertificationPeriod CertificationPeriod { get; set; }
[ForeignKey("Agency")]
public Agency Agency { get; set; }
[ForeignKey("Diagnosis")]
public Diagnosis PrimaryDiagnosis { get; set; }
[ForeignKey("OrderApprovalStatus")]
public OrderApprovalStatus ApprovalStatus { get; set; }
[ForeignKey("User")]
public User User { get; set; }
[ForeignKey("User")]
public User Submitter { get; set; }
public DateTime ApprovalDate { get; set; }
public DateTime SubmittedDate { get; set; }
public Boolean IsDeprecated { get; set; }
}
Ini adalah kesalahan yang saya dapatkan sekarang saat mengakses tampilan VS yang dihasilkan untuk Pasien:
PESAN EROR
The ForeignKeyAttribute pada properti 'Patient' pada jenis 'PhysicianPortal.Models.Order' tidak valid. Nama kunci asing 'Parent' tidak ditemukan pada jenis dependen 'PhysicianPortal.Models.Order'. Nilai Nama harus berupa daftar nama properti kunci asing yang dipisahkan koma.
Salam,
Guido
sumber
Anda dapat mendefinisikan kunci asing dengan:
Sekarang ParentId adalah properti kunci asing dan mendefinisikan hubungan yang diperlukan antara anak dan induk yang ada. Menyimpan anak tanpa keluar dari orang tua akan menimbulkan pengecualian.
Jika nama properti FK Anda tidak terdiri dari nama properti navigasi dan nama PK induk, Anda harus menggunakan anotasi data ForeignKeyAttribute atau fluent API untuk memetakan relasi
Anotasi data:
API Lancar:
Jenis kendala lainnya dapat diberlakukan dengan anotasi data dan validasi model .
Edit:
Anda akan mendapatkan pengecualian jika tidak disetel
ParentId
. Ini adalah properti wajib (bukan nullable). Jika Anda tidak mengaturnya, kemungkinan besar akan mencoba mengirim nilai default ke database. Nilai defaultnya adalah 0 jadi jika Anda tidak memiliki pelanggan dengan Id = 0 Anda akan mendapatkan pengecualian.sumber