PDA

View Full Version : insert with max value another field



hamzehsh
دوشنبه 21 آذر 1401, 14:49 عصر
سلام
من یک جدول دارم که یک فیلد اختصاصی شمارنده داره
طبق یک قانونی این شمارنده بروزرسانی میشه و در رکوردهای جدید ذخیره میشه
توی نرم افزارهای مالی شبیه شماره سند هست
که مستقل از id داره ذخیره میشه و عدد ثابت یا سریالی نداره.

در ef core ایا راهی هست که بشه این فیلد را در زمان درج مقدار دهی کرد؟
مثلا در نوع عددی max را بگیرد و یک عددی بهش اضافه بکند

در حال حاضر بعد از insert دارم id را میگیرم
بعد max میگیرم
بر اساس id این مقدار را به روز میکنم که فرایند صحیحی نیست
راه حل جایگزینی وجود دارد؟


public class Documents
{
public int id {get; set;}
public string formula {get;set;} // فیلد سفارشی شمارنده
public string name {get;set;}
...
}

ROSTAM2
شنبه 10 دی 1401, 08:57 صبح
سلام ب همه.
این تابع رو ببیند کارش همینه:

#5 (https://barnamenevis.org/showthread.php?571717-%D9%85%D8%AD%D8%A7%D8%B3%D8%A8%D8%A7%D8%AA-%D8%A7%D8%B9%D8%AF%D8%A7%D8%AF-%D8%AF%D8%B1-%D9%88%DB%8C%DA%98%D9%88%D8%A7%D9%84-%D8%A8%DB%8C%D8%B3%DB%8C%DA%A9&p=2454171&viewfull=1#post2454171)

hamzehsh
شنبه 10 دی 1401, 15:40 عصر
دو تا راه کار بهش رسیدم که الان دارم استفاده میکنم
هر دوتاش مناسب هست مزایا و معایب رو هم میگم
جهت استفاده یا ایده برای بقیه
راهکار اول
یک مقدار 1000 تای شماره رو cache میکنم بر اساس فیلدهایی که میخواهم
الان 4 تا فیلد دارم 4 * 1000 این مقادیر را اختصاص میدم و نگهداری میکنم
هر بار که رکوردی ایجاد میشود از آن مقدار 1000 تایی ها به تعداد نیاز برمیدارم تا زمانی که به صفر میرسم.
عملا cache حذف میشه و اخرین مقدار دریافت میشه و ....
در نتیجه تکراری یا اختلال ندارم

*** معایب استفاده از حافظه سرور Ram چون محدودیت داریم، سربار تولید شناسه ها بر اساس فرمول، مزایا اطمینان بیشتر و سرعت بالاتر

روش دوم که به فکرم رسید در هر بار ایجاد

از طریق context هر جا لازم بود آخرین رکورد را میخوانم و همزمان formula را مقدار دهی میکنم
context.Documents.max(c=>c.formula) اختصاص مقدار جدید و
بعد رکورد اضافه میشود.

*** معایب ارجاع های متوالی برای بدست آوردن مقادیر رکوردهای سرور پایگاه داده، احتمال مقدار تکراری یا تداخلی (نزدیک به صفر ولی صفر نمیشود)، مزایا عدم استفاده از حافظه سرور App ، جلوگیری از سربار اضافی تولید شناسه