Entity Framework (EF) Core
dagi hisoblangan ustunlar (Computed Columns) DBdagi biror ustunni qiymatini tashqaridan kiritmasdan shunchaki hisoblab topib qiymat belgilash imkonini beradi.
HasComputedColumnSql
methodi orqali hisoblangan ustinni belgilash mumkin. Misol uchun:
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public decimal DiscountedPrice { get; set; }
}
// In your DbContext class:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Product>()
.Property(p => p.DiscountedPrice)
.HasComputedColumnSql("Price * 0.9");
}
Ushbu misolda bizda Id
, Name
va Price
hususiyatlarga ega Product ob'ekti mavjud. Productda DiscountedPrice
xususiyati ham bor, uning qiymatini tashqaridan kiritmasda Price
xususiyati asosida hisoblaymiz. DiscountedPrice
ni hisoblash uchun Price
ni 0,9 ga ko'paytiruvchi SQL ifodasini belgilash uchun HasComputedColumnSql
methodidan foydalanamiz.
Best Practice
Ob'ektning qiymatini tasodifan tashqaridan kiritish yoki o’zgaritirishni oldini olish uchun ComputedColumn (hisoblangan ustun) propertyga private set
modifier bergan ma’qul. Sababi, ComputedColumns boshqa ustunlar yoki boshqa jadvaldagi qiymatlar asosida hisoblash uchun mo'ljallangan va bevosita o'zgartirilmasligi kerak.
Oldingi bo'limda keltirilgan misolda, DiscountedPrice
property DatabaseGenerated(DatabaseGeneratedOption.Computed)
atributiga ega ekanligiga e'tibor bering, lekin unga private set
modifier berilmagan.
DiscountedPrice
yangilangan na’munasi:
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public decimal DiscountedPrice { get; private set; }
}
DiscountedPrice
propertysiga private set
qo'shish orqali biz uning qiymatini Product
ob'ektidan tashqaridan o’zgartirib bo’lmasligini ta’minlaymiz. Shunday qilib, DiscountedPrice
qiymati faqat DB tomonidan hisoblanishi va o’zgartirilishi mumkin.