|
Kaskadli o’chirishni bekor qilish
|
bet | 45/53 | Sana | 30.11.2023 | Hajmi | 1,39 Mb. | | #108476 |
Bog'liq Dasturiy injiniringKaskadli o’chirishni bekor qilish
Agar tashqi kalit NOT NULL (Nullable) qiymatga ega bo’lishi mumkin bo’lsa, bosh element o’chirilishi natijasida u bilan bog‘liq boshqa jadvallarda kaskadli o’chirish amalga oshiriladi.
Yuqorida keltirilgan misolda Manufacturer xususiyati tashqi kalit vazifasini bajaradi va u int tipiga mansub. Shuning uchun jadval generatsiya qilinayotgan vaqtda ON DELETE CASCADE qoidasiga amal qilinadi.
Agar bizda Manufacturer xususiyati int? kabi aniqlangan bo’lsa, WithRequired metodi o’rnida WithOptional() metodidan foydalaniladi:
(modelBuilder.Entity().HasMany(p => p.Phones).WithOptional(p=>p.Company))
Ushbu turda tashkil qilingan aloqada tashqi kalit zarurligi talab etilmaydi. Fluent API da kaskadli o’chirishni olib tashlash uchun WillCascadeOnDelete(false) metodidan foydalanish lozim:
modelBuilder.Entity()
.HasMany(p => p.Phones)
.WithRequired(p => p.Company)
.HasForeignKey(s => s.Manufacturer)
.WillCascadeOnDelete(false);
WillCascadeOnDelete(true) metodi orqali kaskadli o’chirish ta'minlanadi. Shuningdek, kaskadli o’chirishni quyidagi tarzda amalga oshirish mumkin:
using System.Data.Entity.ModelConfiguration.Conventions;
...........................................................
modelBuilder.Conventions.Remove();
modelBuilder.Conventions.Remove();
Annotatsiyalar
Annotatsiyalar orqali modellar va jadvallar o'rtasidagi moslik atributlar yordamida ta'minlanadi. Annotatsiyalarni ta'minlovchi ko’pgina klasslar System.ComponentModel.DataAnnotations nomlar fazosida joylashgan.
Kalitni sozlash
Muayyan xususiyatning kalit ekanligini o’rnatish uchun [Key] atributidan foydalanish lozim:
public class Phone
{
[Key]
public int Ident { get; set; }
public string Name { get; set; }
}
Endilikda Ident xususiyati birlamchi kalit sifatida qabul qilinadi. Kalitni identifikator sifatida o’rnatish uchun DatabaseGenerated(DatabaseGeneratedOption.Identity) atributidan foydalaniladi:
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Ident { get; set; }
Agar xususiyat Key atributi bilan belgilangan bo’lsa va tipiga int mansub bo’lsa, unga DatabaseGenerated(DatabaseGeneratedOption.Identity) atributini qo’llash shart hisoblanmaydi.
|
| |