|
Dasturiy injiniring (EntityFramework 6)
|
bet | 36/53 | Sana | 30.11.2023 | Hajmi | 1,39 Mb. | | #108476 |
Bog'liq Dasturiy injiniringBEGIN i END ifodasi orasida funksiya mazmuni joylashtiriladi. Bizning misolda WHERE operatori orqali Price ustuni qiymati @price dan kichik bo’lgan yozuvlardan iborat. Endi ushbu funksiyani DBda shakllantiramiz. Buning uchun Update tugmasini bosamiz:
So’ngra, hosil qilingan muloqot oynasidagi Update Database tugmasini bosamiz:
Shundan so’ng, Database Explorer oynasidagi Functions qismini topib, yangi hosil qilingan funksiyamizni ko’rishimiz mumkin. Endi biz ushbu funksiyani ishlatishimiz mumkin. Ushbu funksiyaga C# tilidan murojaat qilishdan avval, uning to’g‘ri ishlashini tekshiruvdan o'tkazamiz.
Buning uchun ushbu funksiya nomiga sichqonchaning o’ng tugmasini bosamiz va hosil bo’lgan menyudan Execute qismini tanlaymiz:
Shundan so’ng, funksiyaning kiruvchi parametrlari qiymatini kiritish oynasi shakllantiriladi. Ushbu muloqot oynasidagi Value maydonga funksiyaning @price parametriga mos qiymatni kiritish lozim:
Shundan so’ng, Visual Studio funksiya chaqirish skriptini generatsiya qiladi:
Yuqoridagi natijadan biz yaratgan funksiyaning to’g‘ri ishlashini anglash mumkin. Endi ushbu funksiyaga C# kodidan murojaat qilamiz:
static void Main(string[] args)
{
using (PhoneContext db = new PhoneContext())
{
System.Data.SqlClient.SqlParameter param = new System.Data.SqlClient.SqlParameter("@price", 26000);
var phones = db.Database.SqlQuery("SELECT * FROM GetPhonesByPrice (@price)", param);
foreach (var phone in phones)
Console.WriteLine(phone.Name);
}
Console.ReadKey();
}
Ushbu dasturda SQL Server da joylashgan, PhoneContext ma’lumotlar kontekstiga mos DBdagi GetPhonesByPrice funksiyasi (@price) parametri orqali chaqirilgan.
Xuddi yuqoridagi tartibda chegirmaga mos narxni aniqlovchi funksiyani shakllantiramiz:
CREATE FUNCTION [dbo].[GetPriceWithDiscount]
(
@discount int
)
RETURNS @returntable TABLE
(
Name nvarchar(50),
Price decimal(8,3)
)
AS
BEGIN
INSERT @returntable
SELECT Name, Price - Price * @discount / 100
FROM Phones
RETURN
END
Ushbu funksiya parametr sifatida chegirma foizini (masalan, 10%) qabul qiladi. Natija sifatida esa ikkita maydondan iborat jadvalni qaytaradi. Ushbu maydonlar model nomi va chegirma inobatga olingan narx.
Funksiya yangi Name va Price xususiyatlardan iborat ob’ekt qaytarganligi, shuningdek Price xususiyatning decimal tipiga mansubligi sababli C# tilida mos klassni shakllantiramiz:
class DiscountPhone
{
public string Name { get; set; }
public decimal Price { get; set; }
}
Endilikda funksiya natijasini quyidagicha olishimiz mumkin:
static void Main(string[] args)
{
using (PhoneContext db = new PhoneContext())
{
// 15% li chegirma
System.Data.SqlClient.SqlParameter param = new System.Data.SqlClient.SqlParameter("@discount", 15);
var phones = db.Database.SqlQuery("SELECT * FROM GetPriceWithDiscount (@discount)", param);
foreach (var p in phones)
Console.WriteLine("{0} - {1}", p.Name, p.Price);
}
Console.ReadKey();
}
Saqlanadigan prodseduralar
|
| |